我有这个函数,它为字符串
中包含的每个@username着色 //color @username
function hashtag_links($string,$id_session) {
preg_match_all('/@(\w+)/',$string,$matches);
foreach ($matches[1] as $match) {
$string = str_replace("@$match", "<span class=color>@$match</span>", "$string");
}
return $string;
}
当用户名不同时(@ cat,@ pencil,@ scubadiving),一切都很好,但是如果用户名以相同的字母开头(@ cat,@ caterpiller,@ cattering),则函数只会为重复的字母着色在这种情况下(@cat),该怎么办?
答案 0 :(得分:2)
改为使用preg_replace:
//color @username
function hashtag_links($string,$id_session) {
return preg_replace('/@(\w+)/', '<span class=color>@$1</span>', $string);
}
答案 1 :(得分:0)
嗯...假设你有这样的字符串:
$string='Hey there, folks! @bob, @kevin, @bobby, @keverino';
我会尝试类似的事情:
preg_replace('/(@[A-Za-z0-9]+)/','<span style="color:pink;">\1</span>',$string);
当然,我不知道你的用户名可以包含什么,所以你可能需要调整正则表达式。