【问题标题】:Regular Expression to exclude set of Keywords排除关键字集的正则表达式
【发布时间】:2010-09-12 02:56:25
【问题描述】:

我想要一个在遇到诸如“boon.ini”和“http”之类的词时会失败的表达式。我们的目标是采用这个表达式并能够为任何一组关键字进行构造。

【问题讨论】:

    标签: regex regex-negation


    【解决方案1】:
    ^(?:(?!boon\.ini|http).)*$\r?\n?
    

    (取自RegexBuddy 的库)将匹配任何不包含 boon.ini 和/或 http 的行。这是你想要的吗?

    【讨论】:

      【解决方案2】:

      可以使用的另一种表达方式:

      ^(?!.*IgnoreMe).*$
      

      ^ = 表示行首
      $ = 表示行尾
      (?! Expression) = 表示零宽度前瞻负匹配表达式

      前面的^ 是必需的,否则在评估时,负面的前瞻性可能会从“IgnoreMe”文本内部/之外的某个地方开始 - 并在您不想要的地方进行匹配。

      例如如果您使用正则表达式:

      (?!.*IgnoreMe).*$
      

      输入“Hello IgnoreMe Please”,这将导致类似:“gnoreMe Please”,因为否定的前瞻发现在“I”之后没有完整的字符串“IgnoreMe”。

      【讨论】:

        【解决方案3】:

        您应该在代码中执行此操作,而不是在表达式中否定结果。这样,表达式就变得非常简单了。

        \b(boon\.ini|http)\b
        

        如果 boon.ini 或 http 在您的字符串中的任何位置,将返回 true。由于 \b 或单词边界,它不会匹配 httpd 或 httpxyzzy 之类的单词。如果你愿意,你可以删除它们,它也会匹配它们。要添加更多关键字,只需添加更多管道即可。

        \b(boon\.ini|http|foo|bar)\b
        

        【讨论】:

          【解决方案4】:

          编写一个正则表达式可能会为您提供很好的服务,当遇到您要查找的单词时成功,然后反转条件。

          例如,在 perl 中你会使用:

          if (!/boon\.ini|http/) {
              # the string passed!
          }
          

          【讨论】:

            【解决方案5】:
            ^[^£]*$
            

            上面的表达式将只限制字符串中的井号。这将允许除字符串之外的所有字符。

            【讨论】:

              【解决方案6】:

              哪种语言/正则表达式库?我以为你的问题是围绕 ASP.NET 的,在这种情况下你可以看到本文的“负面外观”部分: http://msdn.microsoft.com/en-us/library/ms972966.aspx

              严格来说,正则表达式的否定,仍然定义了一种正则语言,但是很少有库/语言/工具可以表达它。

              负向lookahed 可能为您提供相同的服务,但实际语法取决于您使用的内容。 Tim 的回答是(?...)

              【讨论】:

                【解决方案7】:

                我使用这个(基于 Tim Pietzcker 的回答)排除了 Google Analytics 配置文件过滤器的非生产子域 URL:

                ^\w+-*\w*\.(?!(?:alpha(123)*\.|beta(123)*\.|preprod\.)domain\.com).*$
                

                您可以在此处查看上下文:Regex to Exclude Multiple Words

                【讨论】:

                  猜你喜欢
                  • 1970-01-01
                  • 2019-08-03
                  • 1970-01-01
                  • 2021-09-16
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 2022-07-22
                  相关资源
                  最近更新 更多