我有以下正则表达式
(?i)(?:\\bauthority\\b).*(?i)(?:\\bmilitary\\b)
这意味着两个词"权威"和#34;军事"按顺序排列"权限"是发生的第一个。
使用java中的pattern和matcher方法,正则表达式为以下字符串
返回true永远不要质疑天体壮丽但过于自信的军队的权威性
哪个适用于此目的。
我的问题是,我想在权威(N字范围)军事意义上增加以下正则表达式的范围。
在上面的例子中,如果N字范围是5,那么它应该返回true。这是因为在权威与军事之间有5个字,其中很强大但是过于自信" 。如果N字范围是3,则必须返回false。如果N字范围是6或更高,它也应该返回true。
我知道我需要在正则表达式的authority\\b)
部分之后添加一些东西,但我不知道要准确添加什么。
答案 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)