使用正则表达式匹配特定模式

Using regex to match a specific pattern

我正在尝试匹配任何不以 "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$

DEMO

更新:

^(?!.*false[12]\b).*\btrue$

(?!.*false[12]\b) negative lookahead 断言字符串将包含任何字符但不包含子字符串 false1false2 并且它必须以字符串 true 结尾, 这就是我们在最后添加 true$ 的原因。