【发布时间】:2008-11-26 22:34:44
【问题描述】:
我正在寻找一个正则表达式,它将匹配所有字符串,除了那些包含特定字符串的字符串。有人可以帮我构建它吗?
例如,查找所有没有的字符串按顺序包含a、b和c。
所以
abasfaf3 会匹配,而
asasdfbasc 不会
【问题讨论】:
-
Any,寻找可以适配任何引擎的通用正则表达式。我真的在寻找一个理论上的答案。
标签: regex
我正在寻找一个正则表达式,它将匹配所有字符串,除了那些包含特定字符串的字符串。有人可以帮我构建它吗?
例如,查找所有没有的字符串按顺序包含a、b和c。
所以
abasfaf3 会匹配,而
asasdfbasc 不会
【问题讨论】:
标签: regex
在 Python 中:
>>> r = re.compile("(?!^.*a.*b.*c.*$)")
>>> r.match("abc")
>>> r.match("xxabcxx")
>>> r.match("ab ")
<_sre.SRE_Match object at 0xb7bee288>
>>> r.match("abasfaf3")
<_sre.SRE_Match object at 0xb7bee288>
>>> r.match("asasdfbasc")
>>>
【讨论】:
在 perl 中:
if($str !~ /a.*?b.*?.*c/g)
{
print "match";
}
应该可以。
【讨论】:
好吧,理论上你可以构建一个匹配相反的正则表达式。但是对于更长的字符串,那个正则表达式会变得很大。您系统地执行此操作的方式是(大大简化):
实际上,您可以只匹配您希望 不 包含在其中的字符串,然后反转结果。这是 awk 中的样子:
echo azyxbc | awk '{ exit ($0 !~ /a.*b.*c/); }' && echo matched
如果你对此感兴趣,我推荐 Michael Sipser 的《计算理论导论》一书。
【讨论】:
在 Java 中:
(?m)^a?(.(?!a[^b\r\n]*b[^\r\nc]*c))+$
匹配
abasfaf3
xxxabasfaf3
不匹配
asasdfbascf
xxxxasasdfbascf
【讨论】: