我试图匹配任何不以“false1”或“false2”开头的字符串,并以true结尾,但由于某种原因,正则表达式不匹配。我究竟做错了什么?使用正则表达式匹配特定模式
$text = "start true";
$regex = "~(?:(^false1|false2).+?) true~";
if (preg_match($regex, $text, $match)) {
echo "true";
}
预期结果:
true
实际结果:
null
我试图匹配任何不以“false1”或“false2”开头的字符串,并以true结尾,但由于某种原因,正则表达式不匹配。我究竟做错了什么?使用正则表达式匹配特定模式
$text = "start true";
$regex = "~(?:(^false1|false2).+?) true~";
if (preg_match($regex, $text, $match)) {
echo "true";
}
预期结果:
true
实际结果:
null
您可以使用负前瞻。
^(?!false[12]).*true$
如果你真的想使用边界那就试试这个,
^(?!false[12]\b).*\btrue$
更新:
^(?!.*false[12]\b).*\btrue$
(?!.*false[12]\b)
排除模式,它断言,该字符串包含任何字符但不是子字符串false1
或false2
,它必须以字符串true
结尾,这就是为什么我们最后添加了true$
。
把你的正则表达式扔进:https://regex101.com,看看右边的解释。然后你会看到你的正则表达式真的做了什么。 ('^(?<!false1 | false2)(。*?)true $') – Rizier123
@ Rizier123这是你的评论中的正则表达式的解决方案或...?因为它不正确。 – frosty
@ Rizier123另外,我已经知道该网站,并知道它做了什么,并没有帮助我弄清楚如何解决它。 – frosty