如果字符串包含特定的子字符串,如何编写一个不匹配的正则表达式?

时间:2010-03-19 07:35:48

标签: regex string

示例:

假设在以下示例中我想匹配不包含单词“NOOOT”的字符串 Example A: This shirt is NOOOT black.
Example B: This shirt is black.

我想要的东西有点像非匹配的字符类(例如[^ abc]),但是对于整个字符串:
.*?(^NOOOT).*?

这样的生物存在吗?

3 个答案:

答案 0 :(得分:4)

^(?:(?!NOOOT).)*$

说明:

^字符串

的开头

(?!NOOOT).声称无法在当前位置匹配NOOOT,然后匹配任何字符。

(?: ...)*这样做很多次,直到......

$字符串结束。

答案 1 :(得分:4)

你可以用negative lookahead assertion (?!…)

做到这一点
^(?:(?!NOOOT).)*$

只有在按字符前进时,当前位置前方没有NOOOT时才会匹配。

使用基本语法也可以这样做。但那更复杂。

答案 2 :(得分:2)

补充正则表达式是一个坏主意。它可能但风格非常糟糕,可能效率低下;并且允许你简明扼要地做出的否定断言可能只能隐藏低效率。几乎总是更好的想法是正常匹配正则表达式并将结果反转为!

如果你绝对必须,你应该只编写负面的正则表达式,例如如果你必须满足一个只能通过提供一个regext来编程的API。