
Netcoder
Seit Reguläre POSIX-Ausdrücke (ereg) seit PHP 5.3.0 veraltet sind, würde ich gerne wissen, wie man die alten Ausdrücke einfach konvertieren kann PCRE (Perl-kompatible reguläre Ausdrücke) (preg).
Als Beispiel habe ich diesen regulären Ausdruck:
eregi('^hello world');
Wie kann ich Ausdrücke übersetzen in preg_match
kompatible Ausdrücke?
Notiz: Dieser Beitrag dient als Platzhalter für alle Beiträge im Zusammenhang mit der Umstellung von Ereg auf Preg und als Duplikatoption für verwandte Fragen. Bitte schließen Sie diese Frage nicht.
Verwandt:
- So ändern Sie PHPs eregi in preg_match
- Ändern von ereg_replace in das entsprechende preg_replace
Die größte Änderung in der Syntax ist die Hinzufügung von Trennzeichen.
ereg('^hello', $str);
preg_match('/^hello/', $str);
Trennzeichen können so ziemlich alles sein, was nicht alphanumerisch ist, ein umgekehrter Schrägstrich oder ein Leerzeichen. Die am häufigsten verwendeten sind allgemein ~
, /
und #
.
Sie können auch passende Klammern verwenden:
preg_match('[^hello]', $str);
preg_match('(^hello)', $str);
preg_match('{^hello}', $str);
// etc
Wenn Ihr Trennzeichen im regulären Ausdruck gefunden wird, müssen Sie es maskieren:
ereg('^/hello', $str);
preg_match('/^\/hello/', $str);
Sie können alle Trennzeichen und reservierten Zeichen in einer Zeichenfolge einfach mit Escapezeichen versehen preg_quote:
$expr = preg_quote('/hello', "https://stackoverflow.com/");
preg_match('/^'.$expr."https://stackoverflow.com/", $str);
Auch PCRE unterstützt Modifikatoren für verschiedene Dinge. Einer der am häufigsten verwendeten ist der Modifikator ohne Berücksichtigung der Groß-/Kleinschreibung i
die Alternative zu Erreg:
eregi('^hello', 'HELLO');
preg_match('/^hello/i', 'HELLO');
Die vollständige Referenz finden Sie unter PCRE-Syntax in PHP im Handbuchsowie ein Liste der Unterschiede zwischen POSIX-Regex und PCRE, um die Konvertierung des Ausdrucks zu unterstützen.
In Ihrem einfachen Beispiel würden Sie jedoch keinen regulären Ausdruck verwenden:
stripos($str, 'hello world') === 0

Sumanand
Das Ersetzen von Ereg durch Preg (ab PHP 5.3.0) war der richtige Schritt zu unseren Gunsten.
preg_match, das eine Perl-kompatible Syntax für reguläre Ausdrücke verwendet, ist oft eine schnellere Alternative zu ereg.
Sie sollten 4 wichtige Dinge wissen, um Ereg-Muster auf Preg zu portieren:
-
Trennzeichen hinzufügen(/): 'pattern' => '/pattern/'
-
Escape-Trennzeichen wenn es ein Teil des Musters ist: 'patt/ern' => '/patt\/ern/'
Erreichen Sie es programmgesteuert auf folgende Weise:
$old_pattern = '<div>.+</div>';
$new_pattern = "https://stackoverflow.com/" . addcslashes($old_pattern, "https://stackoverflow.com/") . "https://stackoverflow.com/";
-
Erreg(Groß-/Kleinschreibung beachten): 'pattern' => '/pattern/i'
Wenn Sie also die eregi-Funktion für den Vergleich ohne Berücksichtigung der Groß-/Kleinschreibung verwenden, fügen Sie einfach ‘i’ am Ende des neuen Musters (‘/Muster/’) hinzu.
-
ASCII-Werte: Wenn Sie in ereg eine Zahl im Muster verwenden, wird davon ausgegangen, dass Sie sich auf das ASCII eines Zeichens beziehen. Aber in Preg wird die Zahl nicht als ASCII-Wert behandelt. Wenn Ihr Muster also einen ASCII-Wert im Ereg-Ausdruck enthält (z. B. neue Zeile, Tabulatoren usw.), konvertieren Sie ihn in Hexadezimal und stellen Sie ihm \x voran.
Example: 9(tab) becomes \x9 or alternatively use \t.

Narayan
Ab PHP-Version 5.3, ereg
ist veraltet.
Umziehen von ereg
zu preg_match
ist nur eine kleine Änderung in unserem Muster.
Zuerst müssen Sie Ihrem Code Trennzeichen hinzufügen, z.
ereg('A-Z0-9a-z', 'string');
zu
preg_match('/A-Z0-9a-z/', 'string');
Zum eregi
Übereinstimmung ohne Berücksichtigung der Groß-/Kleinschreibung, put i
nach dem letzten Trennzeichen, zB:
eregi('pattern', 'string');
zu
preg_match ('/pattern/i', 'string');
Es gibt noch mehr Unterschiede zwischen ereg()
und preg_replace()
als nur die Syntax:
Wenn man nicht mutig genug ist, seine oder sie zu bekehren ereg()
zu preg_match()
kann er oder sie verwenden mb_ereg()das in PHP 7 noch verfügbar ist.
9939900cookie-checkWie kann ich ereg-Ausdrücke in PHP in preg umwandeln?yes
@ yes123: Ja, das ist der Punkt, ich habe es auch satt. Ich möchte einen Wiki-Beitrag, der tatsächlich etwas erklärt, damit wir all diese individuellen Fragen schließen können.
– Netcoder
7. Juni 2011 um 18:38 Uhr
Ich denke, das ist nicht nötig, weil Sie das Alte nur mit einem Trennzeichen umschließen müssen. Ich denke auch, dass Sie dafür eine zuvor beantwortete Frage hätten verwenden können.
– dynamisch
7. Juni 2011 um 18:39 Uhr
Ah, ich habe für ein Schließen gestimmt, bevor ich die Kommentare gelesen habe. Als Platzhalter könnte es einen Zweck erfüllen, aber gibt es nicht eine andere ältere Frage, die als solche hätte dienen können?
– Wrikken
7. Juni 2011 um 18:43 Uhr
Hm, in der Tat.
ereg [php]
liefert keine sehr brauchbaren Ergebnisse. OK, kann meine Unterstützung zu diesem leihen.– Wrikken
7. Juni 2011 um 18:46 Uhr
Leute, wir scheinen fast einen Kreis geschlossener Fragen zu diesem Thema geschaffen zu haben, die alle aufeinander zeigen. Bei diesem Tempo werden sie alle geschlossen 🙂
– Kev
7. Juni 2011 um 19:00 Uhr