我试图匹配任何不以" false1"开头的字符串。或" false2",并以true结尾,但正则表达式由于某种原因不匹配。我做错了什么?
$text = "start true";
$regex = "~(?:(^false1|false2).+?) true~";
if (preg_match($regex, $text, $match)) {
echo "true";
}
预期结果:
true
实际结果:
null
答案 0 :(得分:1)
您可以使用否定前瞻。
^(?!false[12]).*true$
如果你真的想使用边界,那就试试吧,
^(?!false[12]\b).*\btrue$
更新
^(?!.*false[12]\b).*\btrue$
(?!.*false[12]\b)
否定前瞻,断言字符串将包含任何字符,但不包含子字符串false1
或false2
,并且必须以字符串true
结尾,这是为什么我们最后添加了true$
。