【问题标题】:PHP regex preg_replace function Joomla! pluginPHP 正则表达式 preg_replace 函数 Joomla!插入
【发布时间】:2016-01-28 19:34:57
【问题描述】:

我想创建一个插件,用于查找电话号码并将其替换为移动电话的链接号码。这是我为 Joomla 编写的用于替换电话号码的 php 函数...

protected function clickToCall(&$text, &$params){
    // phone number pattern...
    $pattern = '~(\+0?1\s)?\(?\d{3}\)?[\s.-]\d{3}[\s.-]\d{4}~';
    //replacement pattern...
    $replacement = '<a href="tel:$1$2">$1$2</a>';
    //use preg_replace to actually replace the pattern
    $text = preg_replace($pattern, $replacement, $text);
    //return the new value
    return true;
}

现在该函数找到了该模式并将其替换为一个空链接。如何将正则表达式找到的电话号码插入链接?

【问题讨论】:

  • 尝试将'&lt;a href="tel:$1$2"&gt;$1$2&lt;/a&gt;' 替换为'&lt;a href="tel:$0"&gt;$0&lt;/a&gt;'。检查this demo

标签: php regex joomla


【解决方案1】:

问题是您使用的 $1$2 反向引用引用了 Group 1(即用 (\+0?1\s)? 捕获的子字符串)和不存在的 Group 2(因此,它是一个空字符串),而不是整场比赛(可以参考$0\0)。

这是一个修复:

$text = 'Phone +1 (234) 345 6543 to obtain a free copy.';
$pattern = '~(\+0?1\s)?\(?\d{3}\)?[\s.-]\d{3}[\s.-]\d{4}~';
$replacement = '<a href="tel:$0">$0</a>';
echo $text = preg_replace($pattern, $replacement, $text);

IDEONE demo

PHP Manual 中查看有关Back references 的更多信息。

【讨论】:

  • 这太棒了!我猜对 ( ) 的含义以及如何使用 $1$2 等不太了解,因为我对正则表达式不太熟悉,感谢您抽出宝贵时间回答这个问题,这是一个巨大的帮助。
猜你喜欢
  • 2011-05-20
  • 2023-04-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-11
  • 2011-04-11
相关资源
最近更新 更多