51

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

4

7 回答 7

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

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

于 2008-09-22T19:14:24.303 回答
15

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

^(?!.*IgnoreMe).*$

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

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

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

(?!.*IgnoreMe).*$

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

于 2009-05-06T21:58:10.603 回答
13

与其在表达式中否定结果,不如在代码中进行。这样,表达式变得非常简单。

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

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

\b(boon\.ini|http|foo|bar)\b
于 2008-09-22T19:14:08.283 回答
4

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

例如,在 perl 中你会使用:

if (!/boon\.ini|http/) {
    # the string passed!
}
于 2008-09-22T19:16:56.547 回答
2
^[^£]*$

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

于 2010-05-09T16:18:01.450 回答
1

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

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

负向查找可能为您提供相同的服务,但实际语法取决于您使用的内容。蒂姆的回答是一个例子(?...)

于 2008-09-22T19:29:20.633 回答
0

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

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

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

于 2013-10-28T18:07:05.843 回答