Wie

2016-07-28 13 views
0
in php angepasst Teil einer Zeichenfolge markieren

Dies ist meine aktuelle Funktion in php:Wie

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

Die CSS-Klasse:

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

Beispiel:

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

Das Problem ist, dass das Ergebnis ist:

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

... und es sollte sein:

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

Warum haben Sie die \ p {L} *? Teil des Musters? Warum nicht einfach 'preg_replace zurückgeben ("/". Preg_quote ($ Schlüsselwort)."/Ui "," $ 0 ", $ string);' –

+0

@BrandonHorsley hast du recht. Ihre Antwort ist noch einfacher als die erste Antwort unten. – andufo

+1

Es ist nicht notwendig, eine Regex zu verwenden, um einen statischen Wert zu erhalten. Verwenden Sie 'return str_replace ($ keyword, ''. $ Schlüsselwort. '', $ string);' – chris85

Antwort

0

Verwenden Einfanggruppen:

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