我有preg_replace
的以下电话:
$str = preg_replace('@((https?://)?([-\w]+\.[-\w\.]+)+\w(:\d+)?(/([-\w/_\.]*(\?\S+)?)?)*)@', 'mask.php?l='.en('$1'), $str);
我想知道为什么赢得$1
正确传递给我的功能?
它说$1..
如果我取消$1
周围的单引号,那么代码就不起作用。
答案 0 :(得分:1)
$str = preg_replace('@...@', 'mask.php?l='.en('$1'), $str);
这里的执行顺序是:
en('$1')
(是的,字面意思是'$ 1')'mask.php?l='
preg_replace
... 您正在寻找preg_replace_callback
:
$str = preg_replace_callback('@...@', function (array $match) {
return 'mask.php?l=' . en($match[1]);
}, $str);