起初我认为用正则表达式来做这件事很简单,但事实证明,我错了。
我似乎找不到使用正则表达式的简单可靠的方法,所以我把它放在那里:
我想匹配没有被引号包围的每个 FOO 实例,即:
食品
xFOO
傻逼
“福
福"
但不是“FOO”
换句话说,我想找到 FOO,但前提是它不在引号中。我希望这是有道理的。:-)
在您的正则表达式中使用环视:
(?:(?<!")FOO|FOO(?!"))
$s = 'FOO"';
if (preg_match('/(?:(?<!")FOO|FOO(?!"))/', $s, $m))
print_r($m);
这将匹配FOO
它后面没有"
或匹配 FOO 如果它前面没有"
换句话说,只有当 FOO 用双引号括起来时,它才会匹配 FOO。
你可以试试这个模式:
"FOO"(*SKIP)(?!)|FOO
(由于 debuggex 没有完全支持 pcre,您可以使用http://regex.larsolavtorvik.com/或http://www.phpliveregex.com/或http://regexp.zug.fr对其进行测试/ )