我一直在查看 SO,虽然这个问题已经在一种情况下得到了回答:
Regex to match all words except a given list
这不是我要找的。我正在尝试编写一个正则表达式,它匹配任何形式为 [\w]+[(] 的字符串,但它不匹配三个字符串“cat(”、“dog(”和“sheep(”)。
我一直在玩向前看和向后看,但我不能完全到达那里。我可能使这个问题过于复杂,所以任何帮助将不胜感激。
最佳答案
如果正则表达式实现支持 look-ahead or look-behind assertions ,您可以使用以下内容:
\b(?!(?:cat|dog|sheep)\()\w+\(
\b\w+\((?<!\b(?:cat|dog|sheep)\()
我添加了
\b
标记 word boundary 的 anchor .所以catdog(
尽管它包含 dog(
也会被匹配.但是,虽然正则表达式实现更广泛地支持前瞻断言,但具有后视断言的正则表达式更有效,因为它只在前面的正则表达式(在我们的例子中
\b\w+\(
)已经匹配时才进行测试。然而,先行断言将在实际正则表达式匹配之前进行测试。所以在我们的例子中,只要 \b
就会测试前瞻断言。匹配。
关于正则表达式匹配模式,但排除一组单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1172873/