3

起初我认为用正则表达式来做这件事很简单,但事实证明,我错了。

我似乎找不到使用正则表达式的简单可靠的方法,所以我把它放在那里:

我想匹配没有被引号包围的每个 FOO 实例,即:

食品

xFOO

傻逼

“福

福"

但不是“FOO”

换句话说,我想找到 FOO,但前提是它不在引号中。我希望这是有道理的。:-)

4

2 回答 2

4

在您的正则表达式中使用环视:

(?:(?<!")FOO|FOO(?!"))

$s = 'FOO"';
if (preg_match('/(?:(?<!")FOO|FOO(?!"))/', $s, $m))
    print_r($m);

这将匹配FOO它后面没有"或匹配 FOO 如果它前面没有"

换句话说,只有当 FOO 用双引号括起来时,它才会匹配 FOO。

现场演示:http: //ideone.com/kL3I3M

于 2013-10-25T12:40:30.000 回答
0

你可以试试这个模式:

"FOO"(*SKIP)(?!)|FOO

(由于 debuggex 没有完全支持 pcre,您可以使用http://regex.larsolavtorvik.com/http://www.phpliveregex.com/http://regexp.zug.fr对其进行测试/ )

于 2013-10-25T13:59:43.123 回答