正则表达式匹配模式,但排除一组单词

标签 regex

我一直在查看 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/

    相关文章:

    Java 正则表达式验证

    regex - 删除制表符 - perl

    regex - url第一部分的子字符串正则表达式

    regex - clang 格式正则表达式语法引用

    mysql - 如何在 MySQL 中搜索没有定义字符的字符串?

    python - 可选的结束符号和使用正则表达式捕获的几个单词

    c# - 修改 "dd/MM/yyyy"的正则表达式

    regex - 如何获取匹配正则表达式条件的最后一个 Git 标签

    javascript - 缺少正则表达式以捕获最后一个键值列表条目

    php正则表达式在子字符串中查找子字符串