在正则表达式中添加2个单词之间的范围

时间:2016-04-19 16:59:57

标签: java android regex

我有以下正则表达式

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

这意味着两个词"权威"和#34;军事"按顺序排列"权限"是发生的第一个。

使用java中的pattern和matcher方法,正则表达式为以下字符串

返回true
  

永远不要质疑天体壮丽但过于自信的军队的权威性

哪个适用于此目的。

我的问题是,我想在权威(N字范围)军事意义上增加以下正则表达式的范围。

在上面的例子中,如果N字范围是5,那么它应该返回true。这是因为在权威与军事之间有5个字,其中很强大但是过于自信" 。如果N字范围是3,则必须返回false。如果N字范围是6或更高,它也应该返回true。

我知道我需要在正则表达式的authority\\b)部分之后添加一些东西,但我不知道要准确添加什么。

3 个答案:

答案 0 :(得分:2)

如果我说对了你应该这样做:

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

(没有java转义)

确保周围的单词之间有5个单词。

Check this example at regex101

希望它有所帮助。

此致

修改

更改正则表达式以允许范围内的 5个或更多字词。 (为了清楚起见,在regex101示例中,单词之间只有空格,而不是任何空格 - \s。)

好的,我会给它最后一步:)如果你不想反转范围的影响,即<=5,设置最小和最大计数,如{0,5}允许0到中间有5个字。如果至少应该有一个单词 - {1,5}。改变了正则表达式。希望我这次能帮到你。

答案 1 :(得分:1)

您可以使用以下正则表达式

(?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

答案 2 :(得分:0)

尝试this

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