用超链接替换单词的regex帮助


regex help for replace word with hyperlink

我有这样的字符串

"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);

您创建了一个具有[]的字符类,应该删除它们。实际上,您创建了太多的捕获组,它们都是多余的。

你可以使用这个简化的代码:

$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演示

请注意,整个匹配可以使用替换字符串中的$0 backreference进行backreference,因此,不需要用额外的捕获组来包装整个模式(不像Perl旧版本中$&相同的backreference会导致性能问题)。

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

$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);