正则表达式与一个单词不匹配

时间:2015-04-17 16:38:09

标签: regex

我有以下正则表达式([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

我该怎么做?

2 个答案:

答案 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])+)?

参见演示。

https://regex101.com/r/sJ9gM7/128

答案 1 :(得分:2)

这个正则表达式应该可以胜任:

^(?:([a-z]+)\s)?(?:([a-z]+)\s)(?:([a-z]+)\s)?str$

它匹配三个可选单词,后跟空格((?:([a-z]+)\s)?),然后匹配尾随str

correctly matches

  • block str
  • block right str
  • 阻止左右str

但不是:

  • 阻止右侧额外
  • STR
  • 阻止右侧
  • 阻止左右