00 Stimmen

PHP: Reguläre-Ausdruck-Zeichen in String escapen oder maskieren

Frage von Compi | 07.08.2016 um 21:49

Ich habe einen beliebigen String, den ich gerne als regulären Ausdruck benutzen würde. Nun musste ich feststellen, dass dieser Ausdruck nur dann vernünftig funktioniert, wenn er bestimmte Zeichen nicht enthält.

Zum Beispiel geht es nicht, wenn mein String einen Punkt oder ein Plus-Zeichen enthält. Wenn ich nun aber stattdessen \. oder \+ schreibe, geht es wieder. Das scheint man escapen oder maskieren zu nennen.

Wieso ist das so? Und welche Zeichen müssen alle überhaupt maskiert werden? Umso länger ich mit den regulären Ausdrücken arbeite, umso mehr Zeichen tauchen auf, für die es nötig scheint.

AntwortenPositivNegativ
Avatar
0Beste Antwort0 Stimmen

Bestimmte Zeichen haben eine besondere Bedeutung innerhalb von regulären Ausdrücken. Der Punkt steht beispielsweise für ein beliebiges Zeichen, das Plus für eine Wiederholung. Um diese speziellen Zeichen mit besonderer Bedeutung von Zeichen zu unterscheiden, die auch als Zeichen interpretiert werden sollen, müssen diese Zeichen entsprechend maskiert werden, was du mit dem voranstellen des \ erreichen kannst.

Die speziellen Zeichen innerhalb regulärer Ausdrücke sind:

. \ + * ? [ ^ ] $ ( ) { } = ! < > | : -

Nun musst du aber nicht eine Suchen und Ersetzen Funktion für jedes dieser Zeichen schreiben. Stattdessen kannst du einfach die PHP-Funktion preg_quote() benutzen, die nimmt dir die gesamte Arbeit ab.

$txt = "ABC...";

$reg = "...";
$reg = '#'.preg_quote($reg).'#';

$txt = preg_replace($reg, 'DEF', $txt);

echo $txt;  // ABCDEF

Hier würden die Punkte alleine nicht als regulärer Ausdruck funktionieren. Deswegen können wir preg_quote() an und erhalten das gewünschte Ergebnis.
07.08.2016 um 22:00

AntwortenPositiv Negativ
Antworten

Ähnliche Themen

Wichtiger Hinweis

Bitte beachten Sie: Die Beiträge auf askingbox.de sind Beiträge von Nutzern und sollen keine professionelle Beratung ersetzen. Sie werden nicht von Unabhängigen geprüft und spiegeln nicht zwingend die Meinung von askingbox.de wieder. Mehr erfahren.

Jetzt mitmachen

Stellen Sie Ihre eigene Frage oder schreiben Sie Ihren eigenen Artikel auf askingbox.de. So gehts.