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