[英]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個單詞。
希望能幫助到你。
問候
編輯:
將正則表達式更改為允許該范圍內的
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.