【问题标题】:PHP Regex replace multiple urls with itself with a return functionPHP Regex 用返回函数替换多个 url
【发布时间】:2018-04-12 20:38:53
【问题描述】:

我有一个网站,我需要在其中检查和替换带有 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 变量执行本地化功能。我知道可以通过使用 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/

提前致谢,

雷米

【问题讨论】:

  • 所以在TLD后面需要加上en/?
  • 是的,但这不是问题。我首先必须 preg_replace 字符串中的所有链接,并且在要替换 preg 之后,我需要本地化(将 en/ 添加到 url)。
  • 1) 使用 $pattern = "/(?&lt;=href=[\"'])[^\"']+(?=[\"'])/"; 模式 2) preg_replace_callback($pattern, function($m) { return localize_url($m[0]);}, $text); 或类似的东西。
  • @WiktorStribiżew 谢谢!我稍微编辑了代码,效果很好! :)
  • 我今天的最后一票投给了你 :)

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


【解决方案1】:

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

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

然后……

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-10-07
    • 1970-01-01
    • 2016-05-04
    • 2020-08-12
    • 2016-01-06
    • 1970-01-01
    • 2011-09-14
    • 1970-01-01
    相关资源
    最近更新 更多