PCRE正则表达式中的NOT操作

10

是否有可能在正则表达式中使用类似于NOT操作的东西,只有当给定位置的字符串不包含某个字符时才匹配该字符串?

我知道元字符 ^ 可以表示“否定一组字符”,但我很难找到它的使用示例。而且该特殊字符与字符串的开头有歧义,所以有点令人困惑。

3个回答

11

是的,它们被称为“向前否定断言”
例如:some_re(?!not_on_my_watch)

您可能还对以下内容感兴趣:

  • “向后否定断言”
    例如:(?<!not_even_before_my_watch)
  • 以及负字符类 [^\d\sa-z]

您可能还想查看相关的pcre/php断言文档
看看是否有其他有趣的内容。

请注意:负面断言可能 一定会匹配到您不希望匹配的字符串位置。

做好准备:


8
 'foo[^b]ar'

将匹配任何以foo开头且以ar结尾但不包括foobar的内容。所以它否定了[^b]类,其中可以是字符列表(也接受使用范围,如:[^b-d]跳过b,c,d)。


5

如果想要某个字符(例如 x)不出现在特定位置(比如第五个位置),则正则表达式为:

^.{4}[^x]

表示某个字符(例如x)在任何地方都不存在的正则表达式为:

^(?!.*x)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接