我有以下正则表达式([a-z]+)\s([a-z]+)\s([a-z]+)
和以下输入
block right here str
它匹配3个单词(在此处阻止),但我希望它最多匹配3个单词,直到它看到str
,因此以下输入block right str
应仅匹配block right
,但{{{ 1}}应该匹配block right left str
。
我该怎么做?
答案 0 :(得分:4)
^(?!.*\bstr\b)([a-z]+)\s([a-z]+)\s([a-z]+)$
negative lookahead
应该为你做。
编辑:
您需要使用的编辑问题
(\b(?:(?!\bstr\b)[a-z])+)\s(\b(?:(?!\bstr\b)[a-z])+)\s(\b(?:(?!\bstr\b)[a-z])+)?
参见演示。
答案 1 :(得分:2)
这个正则表达式应该可以胜任:
^(?:([a-z]+)\s)?(?:([a-z]+)\s)(?:([a-z]+)\s)?str$
它匹配三个可选单词,后跟空格((?:([a-z]+)\s)?
),然后匹配尾随str
。
但不是: