是否可以让preg_replace解析函数内的变量?
我希望将[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。
有什么想法吗?
答案 0 :(得分:0)
这不起作用。
查看示例的执行顺序:在调用preg_replace之前执行任何file_get_contents。
但是你希望正则表达式的结果作为函数调用的一部分。解决方案: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
);
我没有测试它,而是给你一个想法。