1

是否可以让 preg_replace 解析函数内的变量?

我希望将 a[shorturl]full-url[/shorturl]转换为可点击的短网址。

我想要这样的东西:

    $code = array(
      ...
      '#\[shorturl\]((?:ftp|https?)://.*?)\[/shorturl\]#i' => '<a href="'.file_get_contents("http://...some_api?url=$1").'">$1</a>',
      ...
    )

   $result = preg_replace(array_keys($code), array_values($code), $text);

但这不起作用...... api 确实接收“$1”作为 url 而不是实际的 url。

有什么想法吗?

4

1 回答 1

0

这行不通。

看看你的例子的执行顺序:任何 file_get_contents 在你的 preg_replace 被调用之前被执行。

但是您希望将正则表达式的结果作为函数调用的一部分。解决方案:preg_replace_callback。每次找到匹配项时,此函数都会调用您的代码。例子:

preg_replace_callback('#\[shorturl\]((?:ftp|https?)://.*?)\[/shorturl\]#i', 
    function($a) {
      return '<a href="'.
              file_get_contents('http://...some_api?url='.$a).
              '">'.$a.'</a>';
     }, $text
 );

我没有测试它,但给你一个想法。

于 2013-10-07T01:13:51.033 回答