>我有带有URL的文本和关键字,所以我想找到微笑关键字并用url替换它们。
$text="Didimin, Aydın'ın turistik bir ilçesidir.Didimdeki sahil şeridi ve altınkumdaki plajları ile birlikte akbükteki plajlarda....";
$urls=array('didim'=>'didim.html','altınkum'=>'altinkum.html','akbük'=>'akbük.html');
foreach($urls as $k=>$v){
$text = preg_replace('~'.$k.'(?!(?>[^<]*(?:<(?!/?a'b)[^<]*)*)</a>)~i',
'<a href="'.$v.'" rel="bookmark" title="'.$k.'" >$0</a>', $text,1);
}
echo $text;
怎么会有这样的结果?
<a href="didim.html" title="didim">Didimin</a>, Aydın'ın turistik bir ilçesidir. Didimdeki sahil şeridi ve <a href="altinkum.html" title="altınkum">altınkumdaki</a> plajları ile birlikte <a href="akbük.html" title="akbük">akbükteki</a> plajlarda....
你可以
这样做:
$corr = array('didim'=>'didim.html','altınkum'=>'altinkum.html','akbük'=>'akbük.html');
$str = "Didimin, Aydın'ın turistik bir ilçesidir. Didimdeki sahil şeridi ve altınkumdaki plajları ile birlikte akbükteki plajlarda....";
$pattern = '~(?><(a|head|style|script)'b(?>[^<]++|<(?!/'1))*</'1>|<[^>]++>)(*SKIP)(*FAIL)|('pL*('. implode(array_keys($corr), '|') .')'pL*)~ui';
$str = preg_replace_callback($pattern,
function ($m) use ($corr) {
return '<a href="' .$corr[strtolower($m[3])] . '">' . $m[2] . '</a>';
}, $str);
print_r($str);