|
|
Suchmuster-Modifikatoren
Die zurzeit möglichen PCRE-Modifikatoren sind unten aufgelistet. Die
Bezeichnungen in Klammern beziehen sich auf die internen PCRE-Bezeichnungen
für diese Modifikatoren. Leerzeichen und Zeilenumbrüche in Modifikatoren
werden ignoriert. Andere Zeichen führen zu einem Fehler.
-
i (PCRE_CASELESS)
-
Wenn dieser Modifikator gesetzt ist, passen Buchstaben im Suchmuster
sowohl auf groß- als auch auf kleingeschriebene Buchstaben.
-
m (PCRE_MULTILINE)
-
Standardmäßig behandelt PCRE eine zu durchsuchende Zeichenkette wie
eine einzige Zeile von Zeichen (auch wenn sie tatsächlich mehrere
Zeilenumbrüche enthält). Das Metazeichen für einen Zeilenanfang (^)
passt nur auf den Anfang der Zeichenkette, das Metazeichen für ein
Zeilenende ($) nur auf das Ende der Zeichenkette (falls der Modifikator
D nicht gesetzt ist). Das ist genauso wie bei
Perl.
Wenn dieser Modifikator gesetzt ist, passen die Zeilenanfang- und
Zeilenende-Konstrukte in der Zeichenkette sowohl direkt nach, bzw. vor
einem Zeilenumbruch als auch auf deren Anfang und Ende. Das entspricht
dem Perl-Modifikator /m. Falls die Zeichenkette keine Sequenz "\n"
enthält, oder im Suchmuster kein ^ oder $ vorkommt, hat dieser
Modifikator keine Wirkung.
-
s (PCRE_DOTALL)
-
Wenn dieser Modifikator gesetzt ist, passt das Metazeichen Punkt im
Suchmuster auf alle Zeichen inklusive Zeilenumbrüche. Ohne diesen
Modifikator sind Zeilenumbrüche ausgeschlossen. Dieser Modifikator
entspricht dem Perl-Modifikator /s. Unabhängig davon, ob dieser
Modifikator gesetzt ist, passt eine verneinende Zeichenklasse wie z.B.
[^a] immer auf einen Zeilenumbruch.
-
x (PCRE_EXTENDED)
-
Wenn dieser Modifikator gesetzt ist, werden Leerräume im Suchmuster
ignoriert, sofern sie nicht maskiert sind oder sich innerhalb einer
Zeichenklasse befinden. Außerdem werden Zeichen, die außerhalb einer
Zeichenklasse zwischen nicht maskierten # stehen, einschließlich dem
nächsten Zeilenumbruch ignoriert. Das entspricht dem Perl-Modifikator
/x und bietet die Möglichkeit, Kommentare in komplizierte Suchmuster
einzufügen. Beachten Sie aber, dass dies nur für Datenzeichen gilt.
Leerräume dürfen niemals innerhalb einer Folge spezieller Zeichen
auftreten, zum Beispiel in der Folge (?(, die einen
bedingten Teilausdruck einleitet.
- e (PREG_REPLACE_EVAL)
-
WarnungDieses Feature ist
seit PHP 5.5.0 DEPRECATED (veraltet) und seit PHP 7.0.0 ENTFERNT.
Wenn dieser veraltete Modifikator gesetzt ist, macht
preg_replace in der Ersetzungszeichenkette eine
normale Ersetzung von Rückrefenzen, wertet sie als PHP-Code aus und
verwendet das Ergebnis um damit die gesuchte Zeichenkette zu ersetzen.
Einfache Anführungszeichen, doppelte Anführungszeichen, Backslashes
(\) und NULL-Zeichen werden in den ersetzten
Rückreferenzen mit einem Backslash maskiert.
Achtung
Bei jeder passenden Rückreferenz wird die Funktion
addslashes aufgerufen, bevor sie ersetzt wird.
Wenn die Rückreferenz als Zeichenkette in Anführungszeichen verwendet
wird, werden von daher maskierte Zeichen in Buchstabensymbole
umgewandelt. Allerdings behalten maskierte Zeichen, die normalerweise
nicht umgewandelt würden, ihre Backslashes. Das macht die Verwendung
dieses Modifikators sehr kompliziert.
Achtung
Stellen Sie sicher, dass replacement gültigen
PHP-Code erzeugt, weil sich PHP sonst über einen Parse Error in der
Zeile beschwert, die den Aufruf von preg_replace
enthält.
Achtung
Von der Verwendung dieses Modifikators wird
abgeraten, weil damit sehr leicht
Sicherheitslücken entstehen können:
Der obige Beispiel-Code kann durch Übergabe einer Zeichenkette wie
z.B.
<h1>{${eval($_GET[php_code])}}</h1>
leicht ausgenutzt werden. Das gibt dem Angreifer die Möglichkeit,
beliebigen PHP-Code auszuführen und gibt ihm somit beinahe
vollständigen Zugriff auf den Server.
Um diese Sicherheitslücke zur Ausführung von Code von außen (Remote
Code Execution) zu vermeiden, sollte stattdessen die Funktion
preg_replace_callback verwendet werden:
Hinweis:
Dieser Modifikator wird nur von preg_replace
verwendet; von anderen PCRE-Funktionen wird er ignoriert.
-
A (PCRE_ANCHORED)
-
Wenn dieser Modifikator gesetzt ist, wird das Suchmuster "verankert",
das bedeutet, dass es gezwungen wird, nur auf den Anfang der
durchsuchten Zeichenkette zu passen. Diese Wirkung kann auch durch
geeignete Konstrukte im Suchmuster selbst erreicht werden, was in Perl
die einzige Möglichkeit ist, sie zu realisieren.
-
D (PCRE_DOLLAR_ENDONLY)
-
Wenn dieser Modifikator gesetzt ist, passt ein Dollar-Metazeichen im
Suchmuster nur auf das Ende der durchsuchten Zeichenkette. Ohne diesen
Modifikator passt ein Dollarzeichen auch direkt vor dem letzten
Zeichen, falls es ein Zeilenumbruch ist (aber nicht vor anderen
Zeilenumbrüchen). Wenn der Modifikator m gesetzt
ist, wird dieser Modifikator ignoriert. Für diesen Modifikator gibt es
in Perl keine Entsprechung.
-
S
-
Wenn ein Suchmuster mehrmals verwendet werden soll, lohnt es sich, mehr
Zeit für dessen Analyse aufzubringen um die Suche zu optimieren. Wenn
dieser Modifikator gesetzt ist, wird diese zusätzliche Analyse
durchgeführt. Gegenwärtig ist die Untersuchung eines Suchmusters nur
für nicht verankerte Suchmuster brauchbar, die am Anfang kein einzelnes
fixiertes Zeichen haben.
-
U (PCRE_UNGREEDY)
-
Dieser Modifikator kehrt die Gier von Quantifikatoren um, sodass sie
standardmäßig nicht gierig sind, aber gierig werden, wenn ihnen ein
? folgt. Das ist nicht mit Perl kompatibel. Es kann
auch innerhalb des
Suchmusters mit dem Modifikator (?U) oder
durch ein Fragezeichen hinter dem Quantifikator (z.B.
.*?) gesetzt werden.
Hinweis:
Im Ungreedy-Modus ist es nicht möglich, mehr als pcre.backtrack_limit
Übereinstimmungen zu treffen.
-
X (PCRE_EXTRA)
-
Dieser Modifikator schaltet zusätzliche PCRE-Funktionalität ein, die
nicht mit Perl kompatibel ist. Ein Backslash vor einem Buchstaben, der
keine spezielle Bedeutung hat, verursacht eine Fehlermeldung und
reserviert diese Kombinationen somit für künftige Erweiterungen.
Standardmäßig wird ein Backslash vor einem Buchstaben, der keine
spezielle Bedeutung hat, wie in Perl als Buchstabensymbol behandelt.
Gegenwärtig werden von diesem Modifikator keine weiteren Eigenschaften
kontrolliert.
-
J (PCRE_INFO_JCHANGED)
-
Die interne Option (?J) ändert die lokale Option
PCRE_DUPNAMES. Erlaubt doppelte Namen für
Teilsuchmuster.
-
u (PCRE_UTF8)
-
Dieser Modifikator schaltet zusätzliche PCRE-Funktionalität ein, die
nicht mit Perl kompatibel ist. Suchmuster und durchsuchte Zeichenketten
werden als UTF-8 behandelt. Dieser Modifikator steht unter Unix seit
PHP 4.1.0 und unter Win32 seit PHP 4.2.3 zur Verfügung. Ob es sich im
Suchmuster und in den Zeichenketten um gültiges UTF-8 handelt, wird
seit PHP 4.3.5 überprüft. Eine ungültige Zeichenkette bewirkt, dass
die preg_*-Funktionen keine Übereinstimmungen finden. Ein ungültiges
Suchmuster erzeugt einen Fehler der Stufe E_WARNING.
UTF-8-Zeichenfolgen mit fünf oder sechs Oktetten werden seit PHP 5.3.4,
bzw. PCRE 7.3 2007-08-28 als ungültig betrachtet; davor wurden sie als
gültiges UTF-8 betrachtet.
|