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

有帮助吗?

解决方案

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

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

其他提示

可以使用的替代表达式:

^(?!.*IgnoreMe).*$

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

上的零宽度向前看负匹配

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

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

(?!.*IgnoreMe).*$

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

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

\b(boon\.ini|http)\b
如果boon.ini或http在您的字符串中的任何位置,

将返回 true 。由于 \ 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的回答是(?...)

的例子

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

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

您可以在此处查看上下文:正则表达式排除多个单词

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top