正则表达式帮助用超链接替换单词

时间:2016-07-27 11:14:12

标签: php regex preg-replace str-replace

我有这样的字符串

"this TEST-001 is test TEST-001string TEST-001"

所以我需要让所有TEST-001都包含像

这样的超链接

我试过这个,但它适用于所有匹配字符的超链接。

$re1='(TEST)';  # Word 1
$re2='(-)'; # Any Single Character 1
$re3='(\d+)';   # Integer Number 1

echo preg_replace("/([".$re1.$re2.$re3."])/", "<a href=/$1>$1</a>", $txt);

2 个答案:

答案 0 :(得分:0)

您创建了一个包含[]的角色类,应删除这些角色。实际上,你创建了太多的捕获组,它们都是多余的。

您可以使用此简化代码:

$txt = "this TEST-001 is test TEST-001string TEST-001";
$re1='TEST';  # Word 1
$re2='-'; # Any Single Character 1
$re3='\d+';   # Integer Number 1
echo preg_replace("/$re1$re2$re3/", "<a href=/$0>$0</a>", $txt);

请参阅IDEONE demo

请注意,可以使用替换字符串中的$0反向引用来反向引用整个匹配,因此,不需要使用其他捕获组包装整个模式(与{{1}中的Perl旧版本不同相同的反向引用会导致性能问题)。

答案 1 :(得分:0)

问题是[。删除它们我现有的代码看起来像魅力

$re1='(TEST)';  # Word 1
$re2='(-)'; # Any Single Character 1
$re3='(\d+)';   # Integer Number 1

echo preg_replace("/(".$re1.$re2.$re3.")/", "<a href=/$1>$1</a>", $txt);