使用正则表达式匹配特定模式
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$
更新:
^(?!.*false[12]\b).*\btrue$
(?!.*false[12]\b)
negative lookahead 断言字符串将包含任何字符但不包含子字符串 false1
或 false2
并且它必须以字符串 true
结尾, 这就是我们在最后添加 true$
的原因。
我正在尝试匹配任何不以 "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)
negative lookahead 断言字符串将包含任何字符但不包含子字符串 false1
或 false2
并且它必须以字符串 true
结尾, 这就是我们在最后添加 true$
的原因。