正则expression式来排除一组关键字

我想要一个expression式,当遇到像“boon.ini”和“http”这样的单词时将失败。 目标是采取这个expression式,并能够构build任何关键字集。

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

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

可以使用的替代expression式:

 ^(?!.*IgnoreMe.*).*$ 

^ =表示行的开始
$ =表示行的结尾
(?!expression式)=表示零宽度在expression式前面否定匹配

前面的^是必要的,否则当评估时,负面的预测可能会从'IgnoreMe'文本内部/之外的某个地方开始,并且在你不想要的地方进行比赛。

例如,如果你使用正则expression式:

 (?!.*IgnoreMe.*).*$ 

在input“Hello IgnoreMe Please”时,这会导致类似于“gnoreMe Please”这样的负面观察,发现“I”后面没有完整的string“IgnoreMe”。

在expression式中,不要否定结果,而应该在代码中完成。 这样,expression就变得很简单了。

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

如果boon.ini或http在你的string中的任何地方,将返回true 。 它不会匹配像httpd或httpxyzzy这样的单词,因为\b或单词边界。 如果你愿意,你可以删除它们,它也会匹配这些。 要添加更多的关键字,只需添加更多的pipe道。

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

你可能会写好一个正则expression式,当它遇到你正在寻找的单词时会成功 ,然后反转条件。

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

 if (!/boon\.ini|http/) { # the string passed! } 
 ^[^£]*$ 

上面的expression式将只限制string中的磅符号。 这将允许除string以外的所有字符。

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

严格地说,否定正则expression式,仍然定义了一种正规的语言,但是很less有图书馆/语言/工具可以expression它。

消极的表情可能会为你服务,但实际的语法取决于你正在使用的是什么。 蒂姆的答案是一个例子(?...)

我用这个(基于Tim Pietzcker答案)排除Google Analyticsconfiguration文件filter的非生产子域URL:

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

您可以在这里看到上下文:正则expression式排除多个单词