我一直在寻找SO,虽然这个问题在一个场景中得到了回答:
这不是我想要的.我正在尝试编写一个正则表达式,它匹配任何形式[\ w] + [(]的字符串,但不匹配三个字符串"cat(","dog("和"sheep("具体).
我一直在玩前瞻和后视,但我无法到达那里.我可能会过于复杂,所以任何帮助都将非常感激.
Gum*_*mbo 22
如果正则表达式实现支持前瞻或后端断言,则可以使用以下命令:
使用负前瞻断言:
\b(?!(?:cat|dog|sheep)\()\w+\(
Run Code Online (Sandbox Code Playgroud)使用负面的后置断言:
\b\w+\((?<!\b(?:cat|dog|sheep)\()
Run Code Online (Sandbox Code Playgroud)我添加了\b标记单词边界的锚点.所以catdog(虽然它包含,但会匹配dog(.
但是,虽然前瞻性断言得到了正则表达式实现的更广泛支持,但具有后置断言的正则表达式更有效,因为它仅在前面的正则表达式(在我们的例子中\b\w+\()已经匹配时才进行测试.然而,在实际正则表达式匹配之前,将测试先行断言.因此,在我们的情况下,只要\b匹配,就会测试先行断言.