2016-07-28 15 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); 
}