正则表达式以排除关键字集

时间:2008-09-22 19:05:51

标签: regex regex-negation

我想要一个在遇到“boon.ini”和“http”等词语时会失败的表达式。我们的目标是采用这种表达方式,并能够构建任何一组关键字。

7 个答案:

答案 0 :(得分:46)

^(?:(?!boon\.ini|http).)*$\r?\n?

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

答案 1 :(得分:14)

可以使用的替代表达式:

^(?!.*IgnoreMe).*$

^ =表示行的开始
$ =表示行的结束
(?! Expression) =表示在表达式

上的零宽度预测负匹配

需要前面的^,否则在评估时,负面向前看可以从“IgnoreMe”文本内/之外的某个地方开始 - 并且在你不想要的地方进行匹配。

e.g。如果你使用正则表达式:

(?!.*IgnoreMe).*$

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

答案 2 :(得分:13)

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

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

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

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

答案 3 :(得分:4)

当你遇到你正在寻找的单词时,写一个成功的正则表达式,然后反转条件,你就可以得到很好的服务。

例如,在perl中你可以使用:

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

答案 4 :(得分:2)

^[^£]*$

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

答案 5 :(得分:1)

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

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

否定外观可能会为您提供相同的效果,但实际的语法取决于您使用的内容。蒂姆的回答是(?...)

的一个例子

答案 6 :(得分:0)

我使用此功能(根据Tim Pietzcker的答案)排除Google Analytics配置文件过滤器的非生产子域名网址:

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

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