Ab PHP 5.3.0 sind POSIX-Erweiterungen für reguläre Ausdrücke veraltet. Es gibt einige Unterschiede zwischen POSIX-Regexes und PCRE-Regexes. In diesem Artikel werden die wichtigsten Unterschiede aufgeführt, die Sie beim Wechsel zu PCRE beachten sollten.
Die PCRE-Funktion erfordert, dass das Muster mit einem Trennzeichen abgeschlossen wird.
Im Gegensatz zu POSIX verfügt die PCRE-Erweiterung nicht über dedizierte Funktionen für den Vergleich ohne Berücksichtigung der Groß- und Kleinschreibung. Stattdessen verwendet der Support den Modusmodifikator i (PCRE_CASELESS), um die gleiche Aufgabe zu erfüllen. Andere Mustermodifikatoren können ebenfalls verwendet werden, um die Matching-Strategie zu ändern.
POSIX-Funktionen suchen von links beginnend nach der längsten Übereinstimmung, PCRE stoppt jedoch nach der ersten zulässigen Übereinstimmung. Es macht keinen Unterschied, wenn die Zeichenfolgen nicht übereinstimmen, aber wenn doch, gibt es einen Unterschied in den Ergebnissen und in der Geschwindigkeit. Um diesen Unterschied zu veranschaulichen, betrachten Sie das folgende Beispiel (aus dem Buch Mastering Regular Expressions von Jeffrey Friedl). Wenn man das Muster one(self)?(selfsufficient)? verwendet, um die Zeichenfolge „oneselfsufficient“ abzugleichen, wird PCRE mit „oneself“ übereinstimmen, aber mit POSIX ist das Ergebnis die gesamte Zeichenfolge „oneselfsufficient“. Beide Teilzeichenfolgen stimmen mit der Originalzeichenfolge überein, POSIX behandelt jedoch die längste als Ergebnis.
Funktionsvergleichstabelle
POSIX
PCRE
ereg_replace() preg_replace()
ereg() preg_match()
eregi_replace() preg_replace()
eregi() preg_match()
split() preg_split()
spliti() preg_split()
sql_regcase() Keine äquivalente Funktion