我在数组中有一串单词,我使用preg_replace
将每个单词变成一个链接。目前我的代码有效,每个单词都转换为链接。
这是我的代码:
$keywords = "shoes,hats,blue curtains,red curtains,tables,kitchen tables";
$template = '<a href="http://domain.com/%1$s">%1$s</a>';
$newkeys = preg_replace("/(?!(?:[^<]+>|[^>]+<\/a>))\b([a-z]+)\b/is", sprintf($template, "\\1"), $keywords);
现在,唯一的问题是,当我想要2或3个单词作为单个链接时。例如,我有一个关键字&#34;蓝色窗帘&#34;。该脚本将为单词&#34; blue&#34;创建一个链接。和&#34;窗帘&#34;分别。我的关键字用逗号分隔,我希望preg_replace
只替换逗号之间的文字。
我尝试过使用该模式,但我无法弄清楚模式会是什么。
只是为了澄清,目前输出如下:
<a href="http://domain.com/shoes">shoes</a>,<a href="http://domain.com/hats">hats</a>,<a href="http://domain.com/blue">blue</a> <a href="http://domain.com/curtains">curtains</a>,<a href="http://domain.com/red">red</a> <a href="http://domain.com/curtains">curtains</a>,<a href="http://domain.com/tables">tables</a>,<a href="http://domain.com/kitchen">kitchen</a> <a href="http://domain.com/tables">tables</a>
虽然我想实现以下输出:
<a href="http://domain.com/shoes">shoes</a>,<a href="http://domain.com/hats">hats</a>,<a href="http://domain.com/blue curtains">blue curtains</a>,<a href="http://domain.com/red curtains">red curtains</a>,<a href="http://domain.com/tables">tables</a>,<a href="http://domain.com/kitchen tables">kitchen tables</a>
答案 0 :(得分:0)
preg_replace
代码略有变化,您的工作将完成: -
$keywords = "shoes,hats,blue curtains,red curtains,tables,kitchen tables";
$template = '<a href="http://domain.com/%1$s">%1$s</a>';
$newkeys = preg_replace("/(?!(?:[^<]+>|[^>]+<\/a>))\b([a-z ' ']+)\b/is", sprintf($template, "\\1"), $keywords);
OR
$newkeys = preg_replace("/(?!(?:[^<]+>|[^>]+<\/a>))\b([a-z' ']+)\b/is", sprintf($template, "\\1"), $keywords);
echo $newkeys;
输出: - http://prntscr.com/77tkyb
注意: - 我刚在preg_replace
添加了空格。而且你可以轻松地到达目的地。我希望我很清楚。
preg_replace
中缺少匹配的空格和单词,我只添加了。