2016-07-28 51 views
0

字符串匹配的一部分。这是在PHP我目前的功能:如何突出在PHP

function highlight_keywords($keyword, $string) { 
    return preg_replace("/\p{L}*?".preg_quote($keyword)."\p{L}*/ui", "<span class=\"h\">$0</span>", $string); 
} 

的CSS类:

span.h { 
    font-weight: 700; 
    color: @color_action; 
} 

例子:

echo highlight_keywords('anto', 'Andres Santos'); 

问题结果是:

Andres <span class="h">Santos</span> 

...它应该是:

Andres S<span class="h">anto</span>s 
+2

为什么你的\ p {L} *?模式的一部分?为什么不只是'return preg_replace(“/”。preg_quote($ keyword)。“/ ui”,“ $ 0”,$ string);' –

+0

@BrandonHorsley你是对的。你的答案比下面的第一个答复更简单。 – andufo

+1

没有必要使用正则表达式来匹配静态值。使用'return str_replace($ keyword,''。$ keyword。'',$ string);' – chris85

回答

0

使用捕捉组:

function highlight_keywords($keyword, $string) { 
    return preg_replace("/(\p{L}*?)(".preg_quote($keyword).")(\p{L}*)/ui", "$1<span class=\"h\">$2</span>$3", $string); 
}