我正在寻找一个匹配所有字符串的正则表达式,除了那些包含特定字符串的字符串。有人可以帮我构建吗?
例如,查找不的所有字符串按顺序包含a,b和c。
所以
abasfaf3会匹配,而
asasdfbasc不会
答案 0 :(得分:4)
在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")
>>>
答案 1 :(得分:2)
in perl:
if($str !~ /a.*?b.*?.*c/g)
{
print "match";
}
应该有用。
答案 2 :(得分:1)
嗯,你可以理论上建立一个与之相反的正则表达式。但对于更长的字符串,正则表达式会变大。系统地这样做的方式是(大大简化):
实际上,您可以匹配不所包含的字符串,并反转结果。这是awk中的样子:
echo azyxbc | awk '{ exit ($0 !~ /a.*b.*c/); }' && echo matched
如果您对此感兴趣,我推荐Michael Sipser撰写的“计算理论导论”一书。
答案 3 :(得分:0)
:
(?m)^a?(.(?!a[^b\r\n]*b[^\r\nc]*c))+$
匹配
abasfaf3
xxxabasfaf3
不符合
asasdfbascf
xxxxasasdfbascf