具有NOT操作的PCRE正则表达式

时间:2012-12-17 05:34:51

标签: regex

是否可以在正则表达式中使用与NOT操作等效的内容,以便仅在字符串在给定位置中不包含某个字符时匹配该字符串?

我看到元字符说^可能意味着“否定一个类”,但我很难找到它的使用示例。而且这个特殊的字符在字符串的开头是不明确的,所以它有点令人困惑。

3 个答案:

答案 0 :(得分:7)

是的,它们被称为前瞻性否定断言,例如some_re(?!not_on_my_watch)

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

  • lookbehind 否定断言,(?<!not_even_before_my_watch)
  • 和负字符类[^\d\sa-z]

您可能还想检查亲戚pcre/php documentation for assertions 看看你是否发现其他有趣的东西。

请注意:否定断言 将匹配您的意愿,在字符串中的位置,您没有想到。做好准备:

答案 1 :(得分:5)

 'foo[^b]ar'

匹配任何内容均以foo开头,以arfoobar结尾。所以它否定了[^b]类,它也可以是一个字符列表(并且使用范围被接受为:[^b-d]跳过b,c,d)。

答案 2 :(得分:3)

特定字符(例如x)不在特定位置(例如位置5)的正则表达式为:

^.{4}[^x]

某个字符的正则表达式(例如x)不是任何地方

^(?!.*x)