为什么这个preg_replace代码不起作用?

时间:2015-10-08 13:46:49

标签: php regex preg-replace

我有preg_replace的以下电话:

$str = preg_replace('@((https?://)?([-\w]+\.[-\w\.]+)+\w(:\d+)?(/([-\w/_\.]*(\?\S+)?)?)*)@', 'mask.php?l='.en('$1'), $str);

我想知道为什么赢得$1正确传递给我的功能?

它说$1..如果我取消$1周围的单引号,那么代码就不起作用。

1 个答案:

答案 0 :(得分:1)

$str = preg_replace('@...@', 'mask.php?l='.en('$1'), $str);

这里的执行顺序是:

  1. en('$1')(是的,字面意思是'$ 1')
  2. 将结果与'mask.php?l='
  3. 连接起来
  4. 致电preg_replace ...
  5. 您正在寻找preg_replace_callback

    $str = preg_replace_callback('@...@', function (array $match) {
        return 'mask.php?l=' . en($match[1]);
    }, $str);