示例:
假设在以下示例中我想匹配不包含单词“NOOOT”的字符串
Example A: This shirt is NOOOT black.
Example B: This shirt is black.
我想要的东西有点像非匹配的字符类(例如[^ abc]),但是对于整个字符串:
.*?(^NOOOT).*?
这样的生物存在吗?
答案 0 :(得分:4)
^(?:(?!NOOOT).)*$
说明:
^
字符串
(?!NOOOT).
声称无法在当前位置匹配NOOOT
,然后匹配任何字符。
(?: ...)*
这样做很多次,直到......
$
字符串结束。
答案 1 :(得分:4)
你可以用negative lookahead assertion (?!…)
:
^(?:(?!NOOOT).)*$
只有在按字符前进时,当前位置前方没有NOOOT
时才会匹配。
使用基本语法也可以这样做。但那更复杂。
答案 2 :(得分:2)
补充正则表达式是一个坏主意。它可能但风格非常糟糕,可能效率低下;并且允许你简明扼要地做出的否定断言可能只能隐藏低效率。几乎总是更好的想法是正常匹配正则表达式并将结果反转为!
。
如果你绝对必须,你应该只编写负面的正则表达式,例如如果你必须满足一个只能通过提供一个regext来编程的API。