PHP - 简单的preg_replace奇怪的事情

时间:2013-06-28 17:39:44

标签: php regex preg-replace

我有这个数组:

'@(.*?)<div>(.*?)</div>(.*?)@i' => 'ok'

我正在使用preg_replace从某个字符串返回值“ok”。

问题在于,当我执行preg_replace时,最后(.*?)未被“检测到”。

实施例

我有字符串:test1<div>test2</div>test3

使用该数组和preg_replace,它将返回oktest3。为什么不替换test3?

1 个答案:

答案 0 :(得分:4)

问题是,.*?是非贪婪的匹配,因此尝试尽可能少地匹配。

如果您希望它从字符串的开头到结尾匹配,请使用^ and $将正则表达式锚定到开头和结尾,如下所示:

'@^(.*?)<div>(.*?)</div>(.*?)$@i' => 'ok'