PHP Regex用返回函数替换多个url

时间:2018-04-12 20:38:53

标签: php preg-replace backend preg-replace-callback

我有一个网站,我需要检查并用href替换文本,这不是问题。但是我必须本地化url,这是通过一个函数来完成的,但我不能让它一起工作。

我的代码替换链接:

$text = "this is a test text blabla <a href="https://example.com/test/">Test</a>";
$pattern = "/(?<=href=(\"|'))[^\"']+(?=(\"|'))+/";
$replace = '${0}';
echo preg_replace($pattern, $replace, $text);

当我替换文本时,我需要在$ replace变量上执行localize函数。我知道可以通过使用preg_replace_callback完成,我搜索了互联网,但无法使其正常工作。

我的本​​地化网址代码:

$replace = WPGlobus_Utils::localize_url($replace, 'en');
// This will replace the url from https://example.com/test/ to https://example.com/en/test/

提前致谢,

雷米

1 个答案:

答案 0 :(得分:1)

您需要使用preg_replace_callback以下略微增强的模式:

$pattern = "/(?<=href=[\"'])[^\"']+(?=[\"'])/";

然后......

$result = preg_replace_callback($pattern, function($m) { 
   return localize_url($m[0]);
}, $text);

请注意,(\"|')旨在匹配"',而使用字符类(["'])会更好,更有效。