是否有可能在正则表达式中使用类似于NOT操作的东西,只有当给定位置的字符串不包含某个字符时才匹配该字符串?
我知道元字符 ^ 可以表示“否定一组字符”,但我很难找到它的使用示例。而且该特殊字符与字符串的开头有歧义,所以有点令人困惑。
是否有可能在正则表达式中使用类似于NOT操作的东西,只有当给定位置的字符串不包含某个字符时才匹配该字符串?
我知道元字符 ^ 可以表示“否定一组字符”,但我很难找到它的使用示例。而且该特殊字符与字符串的开头有歧义,所以有点令人困惑。
是的,它们被称为“向前否定断言”
例如:some_re(?!not_on_my_watch)
您可能还对以下内容感兴趣:
(?<!not_even_before_my_watch)
[^\d\sa-z]
您可能还想查看相关的pcre/php断言文档。
看看是否有其他有趣的内容。
请注意:负面断言可能 一定会匹配到您不希望匹配的字符串位置。
做好准备:
'foo[^b]ar'
将匹配任何以foo
开头且以ar
结尾但不包括foobar
的内容。所以它否定了[^b]
类,其中可以是字符列表(也接受使用范围,如:[^b-d]
跳过b,c,d)。
如果想要某个字符(例如 x
)不出现在特定位置(比如第五个位置),则正则表达式为:
^.{4}[^x]
表示某个字符(例如x
)在任何地方都不存在的正则表达式为:
^(?!.*x)