2017-11-14 7 views
0

Ich muss einen Weg finden, Teil der Zeichenfolge in Text zu finden und sie ersetzen mit ***Zeichenfolge, die durch Leerzeichen oder andere Sonderzeichen in PHP getrennt ist

Zum Beispiel, ich habe Text "Jumping fox jumps around the box" im Normalfall würde ich folgendes verwenden:

preg_replace ('/ \ b (Fuchs) \ b/i', '****', 'Fuchs');

aber ich mag Fälle abzudecken, wenn wir Text "Jumping f.o.x jumps around the box" oder "Jumping f o x jumps around the box"

Also im Grunde haben, würde ich regex braucht diese Art von Suche zu unterstützen ... mehr Sonderzeichen zu decken ist noch besser

+3

Verwenden Sie dann ''/ \ bf \ W * o \ W * x \ b/i'' –

Antwort

1

Eine Möglichkeit wäre, die Klasse der zu ignorierenden Zeichen zwischen jedem Zeichen der Suchzeichenfolge hinzuzufügen. Dies könnte mit einfachen PHP-Funktionen

$string = 'Jumping f.o.x jumps around the box'; 
$word = 'fox'; 
$ignore = '[\s\.]*'; 
$regex = '/\b' . join($ignore, str_split($word)) . '\b/i'; 
$new_string = preg_replace($regex, '***', $string); 

Wenn Ihr Wort enthält einige regex Sonderzeichen durchgeführt werden, können Sie preg_quote auf jeden char anwenden möchten.

join($ignore, array_map(function($char) { 
    return preg_quote($char, '/'); 
}, str_split($word))); 
+0

Nicht schlecht. Was wäre Regex _ oder - in diesem Teil? – Sheremet

+1

fügen Sie einfach die Zeichen der Ignorierklasse '[\ s \ ._-]' hinzu (denken Sie daran, '-' hat eine besondere Bedeutung und muss am Ende/Anfang entfernt werden) – Philipp

+0

Ich habe ein Problem, wenn Fox f.ox oder fo.x ist (kann auch ein anderer Char sein), könntest du mir dabei helfen? – Sheremet

0

Dies ist die letzte Funktion.

if (! function_exists('preg_replace_word')) { 

    function preg_replace_word($search, $replace, $string) 
    { 
     $ignore = '[\s\._-]*'; 
     $regex = '/\b' . join($ignore, str_split($search)) . '\b/i'; 
     return preg_replace($regex, $replace, $string); 
    } 
} 
Verwandte Themen