2017-09-10 4 views
0

Ich möchte Text mit preg_replace.But meine Suchzeichenfolge ersetzen haben ein/so macht es Problem.PHP Preg_replace() Muster funktioniert nicht

Wie kann ich es lösen?

$search='r/trtrt'; 
echo preg_replace('/\b'.addslashes($search).'\b/', 'ERTY', 'TG FRT'); 

Ich erhalte error preg_replace(): Unknown modifier 'T'

Antwort

3

Verwenden Sie eine andere delimiter und nicht addslashes verwenden, das heißt zu entkommen ohne reguläre Ausdrücke Sonderzeichen (oder eine Mischung aus regex und ohne reguläre Ausdrücke Zeichen, ich würde sagen, dass die Mehrheit der nicht Zeit addslashes verwenden).

$search='r/trtrt'; 
echo preg_replace('~\b'. $search.'\b~', 'ERTY', 'TG FRT'); 

Sie könnten preg_quote als Alternative verwenden. Das Ändern des Begrenzers ist jedoch die einfachste Lösung.

2

Verwendung ~ als Trennzeichen:

$search='r/trtrt'; 
echo preg_replace('~\b'.addslashes($search).'\b~', 'ERTY', 'TG FRT'); 

ich immer ~ verwenden, da es eines der am wenigsten verwendeten Zeichen in einem String ist, aber Sie können einen beliebigen Zeichen, das Sie verwenden will und wirst deinen Regexp Chars nicht entkommen müssen!

Sie brauchen nicht addslashes() in Ihrem Fall, aber wenn Sie eine komplexere Regexp haben und Sie chars entkommen möchten, sollten Sie preg_quote($search) verwenden.

1

Warum es den Weg nicht entkommen gemeint ist

$search='r/trtrt'; 
echo preg_replace('/\b'.preg_quote($search, '/').'\b/', 'ERTY', 'TG FRT'); 

http://php.net/manual/en/function.preg-quote.php

preg_quote() durchgeführt werden, nimmt str und setzt einen Backslash vor jedem Zeichen, das ist Teil der Syntax für reguläre Ausdrücke Dies ist nützlich, wenn Sie einen Laufzeit Zeichenfolge, die Sie benötigen in einigen Text anzupassen und die Zeichenfolge spezielle Regex Zeichen enthalten

Begrenzer

Wenn das optionale Trennzeichen angegeben wird, es wird auch entkommen. Dies ist nützlich, um das Trennzeichen zu umgehen, das von den PCRE Funktionen benötigt wird. Das/ist das am häufigsten verwendete Trennzeichen.

Hinzufügen von Schrägstrichen ist nicht die Funktion, die hier verwendet wird. Es bietet kein Entweichen für eines der Sonderzeichen in Regx.

Die Sonderzeichen für den regulären Ausdruck sind:. \ + *? [^] $() { } =! <> | : -

die richtigen Funktionen Mit fördern Lesbarkeit des Codes, wenn zu einem späteren Zeitpunkt die ~ sehen Sie oder ein anderer Kodierer Begrenzer sie nur ihren Teil eines persönlichen „Stil“ oder zahlen es wenig Aufmerksamkeit mögen denken, . Wenn die Eingabe jedoch korrekt maskiert ist, wird jedem erfahrenen Programmierer mitgeteilt, dass die Eingabe Zeichen enthalten kann, die mit regulären Ausdrücken in Konflikt stehen.

Persönlich ist die Lesbarkeit ganz oben auf meiner Liste, wenn ich Code schreibe. Wenn Sie es auf einen Blick nicht verstehen, was ist es gut.

+1

so ist es, ich bin eine vernünftige Person, aktualisiert. – ArtisticPhoenix