我正在尝试使用preg_match捕获某个字符串。我正在尝试捕获所有不以单词(what)开头并以(是我的名字)结尾的字符串,但是,我的正则表达式并不是出于某种原因捕获名称。我做错了什么?
$string = "alex is my name";
if (preg_match("~(?<!what) is my name~", $string, $match)) {
print_r($match);
} //end of if (preg_match("~(?<!what) is my name~", $string, $match))
结果:
数组([0] =&gt;是我的名字)
需要结果:
数组([0] =&gt;亚历克斯)([1] =&gt;是我的名字)
答案 0 :(得分:2)
使用负向前瞻而不是负面的后瞻..
preg_match("~^(?!what\b)(\w+) is my name\b~", $string, $match)
或
preg_match("~\b(?!what\b)(\w+) is my name\b~", $string, $match)
如有必要,将最后一个\b
替换为行锚$
的结尾。