8

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

我看到元字符说 ^ 可能意味着“否定一个类”,但我很难找到它的使用示例。而且那个特定的字符与字符串的开头是模棱两可的,所以它也有点混乱。

4

3 回答 3

8

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

你也可能对此有兴趣:

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

您可能还想查看相关的pcre/php 文档中的断言
看看你是否发现其他一些有趣的东西。

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

于 2012-12-17T05:45:26.213 回答
6
 'foo[^b]ar'

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

于 2012-12-17T05:40:04.663 回答
4

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

^.{4}[^x]

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

^(?!.*x)
于 2012-12-17T05:38:19.380 回答