我有这样的字符串
"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);