我想要一个在遇到诸如“boon.ini”和“http”之类的词时会失败的表达式。目标是采用此表达式并能够为任何一组关键字构建。
7 回答
^(?:(?!boon\.ini|http).)*$\r?\n?
(取自RegexBuddy的库)将匹配任何不包含 boon.ini 和/或 http 的行。那是你想要的吗?
可以使用的另一种表达方式:
^(?!.*IgnoreMe).*$
^
= 表示行首
$
= 表示行尾
(?! Expression)
= 表示零宽度前瞻 表达式的负匹配
在^
前面是必需的,否则在评估时,负面展望可能从“IgnoreMe”文本之内/之外的某个地方开始 - 并在您不想要的地方进行匹配。
例如,如果您使用正则表达式:
(?!.*IgnoreMe).*$
输入“Hello IgnoreMe Please”,这将导致类似:“gnoreMe Please”,因为否定的前瞻发现在“I”之后没有完整的字符串“IgnoreMe”。
与其在表达式中否定结果,不如在代码中进行。这样,表达式变得非常简单。
\b(boon\.ini|http)\b
true
如果 boon.ini 或 http 在您的字符串中的任何位置,将返回。\b
由于, 或单词边界,它不会匹配 httpd 或 httpxyzzy 之类的单词。如果你愿意,你可以删除它们,它也会匹配那些。要添加更多关键字,只需添加更多管道。
\b(boon\.ini|http|foo|bar)\b
编写一个在遇到您要查找的单词时会成功的正则表达式,然后反转条件,您可能会得到很好的服务。
例如,在 perl 中你会使用:
if (!/boon\.ini|http/) {
# the string passed!
}
^[^£]*$
上面的表达式将只限制字符串中的井号。这将允许除字符串之外的所有字符。
哪种语言/正则表达式库?我以为您的问题是关于 ASP.NET,在这种情况下您可以看到本文的“负面外观”部分:http: //msdn.microsoft.com/en-us/library/ms972966.aspx
严格来说,正则表达式的否定仍然定义了正则语言,但很少有库/语言/工具可以表达它。
负向查找可能为您提供相同的服务,但实际语法取决于您使用的内容。蒂姆的回答是一个例子(?...)
我使用它(基于 Tim Pietzcker 的回答)来排除 Google Analytics 配置文件过滤器的非生产子域 URL:
^\w+-*\w*\.(?!(?:alpha(123)*\.|beta(123)*\.|preprod\.)domain\.com).*$
您可以在此处查看上下文:Regex to Exclude Multiple Words