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

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=/></a>", $txt);

您使用 [] 创建了角色 class,应将其删除。实际上,您创建的捕获组太多了,它们都是多余的。

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

$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=/[=10=]>[=10=]</a>", $txt);

IDEONE demo

请注意,可以使用替换字符串中的 [=13=] 反向引用来反向引用整个匹配项,因此,无需使用额外的捕获组来包装整个模式(与 Perl 旧版本中的 $& 相同的反向引用导致性能问题)。

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

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

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