簡體   English   中英

在正則表達式中添加2個單詞之間的范圍

[英]Adding a range between 2 words in regex

我有以下正則表達式

(?i)(?:\\\\bauthority\\\\b).*(?i)(?:\\\\bmilitary\\\\b)

這意味着找到兩個詞“權威”和“軍事”,其中“權威”是事件中的第一個。

使用Java中的pattern和matcher方法,正則表達式對以下字符串返回true

永遠不要質疑天國宏偉而自信的權威

哪個為此目的工作。

我的問題是,我想在軍事意義上(N字范圍)在以下正則表達式中添加范圍。

在上面的示例中,如果N字范圍是5,則應返回true。 這是因為在權威和軍事之間有五個詞“天上的宏偉而自信” 如果N字范圍是3,則必須返回false。 如果N個字的范圍是6或更高,它也應該返回true。

我知道我需要在regex的authority\\\\b)部分之后添加一些內容,但我不知道要添加什么內容。

如果我答對了,應該這樣做:

(?i)\bauthority(?: +\S+){0,5} +military\b

(沒有Java逸出)

確保周圍的單詞之間有5個單詞。

在regex101上檢查此示例

希望能幫助到你。

問候

編輯:

將正則表達式更改為允許該范圍內的 5個或更多單詞。 (在regex101示例中,為清楚起見,單詞之間只有空格,沒有空格- \\s 。)

好吧,我將盡力而為:)如果您不希望反轉范圍的影響,即<=5 ,請設置最小值和最大值(例如{0,5}允許介於0到5個字之間。 如果應該至少有一個單詞- {1,5} 更改了正則表達式。 希望這次我對你。

您可以使用以下正則表達式

(?i)(?:\bauthority\b)\s+(?:[^\s]+\s){5,}(?:\bmilitary\b)

分成幾個部分

(?i)(?:\bauthority\b)  - from your origional regex
\s+                    - match a space
  (?:[^\s]+\s)         - Match a word, defined as a 1 or more characters which isnt a space followed by a space
  {5}                  - Match that "word" exactly 5 times
(?:\bmilitary\b)       - The word military

嘗試一下

(?i)(?:\bauthority\b)(?:\s[^\s]+){5}\s(?i)(?:\bmilitary\b)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM