协慌网

登录 贡献 社区

如何否定正则表达式中的特定单词?

[^bar]一样否定一组字符,但是我需要一个正则表达式,其中否定适用于特定单词 - 因此在我的示例中,如何否定实际的bar而不是 “bar 中的任何字符”?

答案

做到这一点的一种好方法是使用负前瞻

^(?!.*bar).*$

否定的超前构造是一对圆括号,圆括号的开头是问号和感叹号。在先行内部 [是任何正则表达式模式]。

除非性能是最重要的问题,否则通常只需要通过第二遍就可以轻松完成结果,而跳过那些与您要否定的单词相匹配的结果通常会更容易。

正则表达式通常意味着您无论如何都在执行脚本或某种低性能的任务,因此请找到易于阅读,易于理解和易于维护的解决方案。

您可以使用否定的前瞻性或后瞻性

^(?!.*?bar).*
^(.(?<!bar))*?$

或仅使用基础知识:

^(?:[^b]+|b(?:$|[^a]|a(?:$|[^r])))*$

这些都匹配不包含bar任何东西。