我想转换以下文本中的所有电话号码到HTML A标签:
My phone number is 06 06 06 06 06.
But this one can write +33 606 06 06 06.
My facebook profile is https://www.facebook.com/profile.php?id=100060606060606.
该功能应按以下方式呈现文本:
My phone number is <a href="tel:06 06 06 06 06">06 06 06 06 06</a>.
But this one can write <a href="tel:+33 606 06 06 06">+33 606 06 06 06</a>.
My facebook profile is https://www.facebook.com/profile.php?id=100060606060606.
我尝试将preg_replace
与REGEX #(?:(?:\+|00)33|0)\s*[1-9](?:[\s.-]*\d{2}){4}#
一起使用
然而,这个正则表达式也捕获了facebook链接中的数字。
如何构造正则表达式以避免在Facebook链接中捕获数字,或者用PHP执行任务的另一种解决方案?
1条答案
按热度按时间gk7wooem1#
您可以在相关位置添加数字边界:
这里,
(?<!\d)
是左手数字边界,(?!\d)
是右手数字边界。参见regex demo。请注意,
\+
部分之前没有数字边界模式,因为+
已经是一个非数字字符。另一个具有类似逻辑的模式可以用单词和非单词边界来写:
这里,
\B
放在\+
之前,以匹配字符串的开头,或者当它紧挨着任何其他非单词字符时。参见regex demo。请注意,它比第一个正则表达式的限制性更强。