PHP 正则表达式使用 return 函数将多个 url 替换为自身

PHP Regex replace multiple urls with itself with a return function

我有一个网站,我需要在其中检查并替换带有 href 的文本,这不是问题所在。但是我必须本地化 url,这是通过一个函数完成的,但我无法让它协同工作。

我用来替换链接的代码:

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

当我替换文本时,我需要对 $replace 变量执行本地化功能。我知道这可以通过使用 preg_replace_callback 来完成,我在互联网上搜索但无法正常工作。

我的本地化代码 url:

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

提前致谢,

雷米

您需要将 preg_replace_callback 与以下稍微增强的模式一起使用:

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

然后...

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

请注意,(\"|') 用于匹配 "',使用字符 class 会更好、更高效,即 ["'].