Wie kann ich umwandeln Ausdrücke ereg zu preg in PHP?
Seit Reguläre POSIX-Ausdrücke (ereg) sind veraltet seit PHP 5.3.0, ich würde gerne wissen, eine einfache Möglichkeit, konvertieren Sie die alten Ausdrücke zu PCRE (Perl-Kompatible Reguläre Ausdrücke) (preg).
Pro Beispiel, habe ich diesen regulären Ausdruck:
eregi('^hello world');
Wie kann ich das übersetzen von Ausdrücken in preg_match
kompatibel Ausdrücke?
Hinweis: Dieser post dient als Platzhalter für alle Beiträge, die im Zusammenhang mit der Umrechnung von ereg zu preg, und als Duplikat Optionen für Verwandte Fragen. Bitte schließen Sie nicht diese Frage stellen.
Verwandte:
Ja, das ist der Punkt, ich bin müde, es zu. Ich will einen wiki-Beitrag, der tatsächlich erklärt, so etwas können wir schließen alle diese einzelnen Fragen.
Ich denke, dass keine Notwendigkeit für diese, da müssen Sie nur wickeln Sie den alten mit einem Trennzeichen. Ich denke auch, Sie hätte eine Vorherige Frage geantwortet haben.
Ah, stimmten für eine enge, vor dem Lesen der Kommentare. Als Platzhalter könnte es dienen einem Zweck, aber gibt es nicht eine andere ältere Frage, könnte gedient haben als solche?
Hmm, in der Tat.
Leute, wir scheinen fast erstellt einen Kreis, der geschlossen Fragen zu diesem Thema alle zueinander zeigen. Bei diesem Tempo werden Sie alle geschlossen werden 🙂
Ich denke, dass keine Notwendigkeit für diese, da müssen Sie nur wickeln Sie den alten mit einem Trennzeichen. Ich denke auch, Sie hätte eine Vorherige Frage geantwortet haben.
Ah, stimmten für eine enge, vor dem Lesen der Kommentare. Als Platzhalter könnte es dienen einem Zweck, aber gibt es nicht eine andere ältere Frage, könnte gedient haben als solche?
Hmm, in der Tat.
ereg [php]
nicht liefern sehr viel nützliche Ergebnisse. OK, kann leihen meine Unterstützung.Leute, wir scheinen fast erstellt einen Kreis, der geschlossen Fragen zu diesem Thema alle zueinander zeigen. Bei diesem Tempo werden Sie alle geschlossen werden 🙂
InformationsquelleAutor netcoder | 2011-06-07
Du musst angemeldet sein, um einen Kommentar abzugeben.
Die größte änderung in der syntax ist die Zugabe von Trennzeichen.
Trennzeichen können so ziemlich alles, was nicht alpha-numerischen, ein backslash oder ein whitespace-Zeichen. Die am häufigsten verwendeten sind in der Regel
~
,/
und#
.Können Sie auch passende Klammern:
Wenn Ihr Trennzeichen gefunden wird, die in dem regulären Ausdruck, den Sie haben, um es zu entkommen:
Können Sie leicht entkommen, alle Klammern und reservierte Zeichen in einem string, indem preg_quote:
Auch, PCRE unterstützt Modifikatoren für verschiedene Dinge. Einer der am häufigsten verwendeten ist die case-insensitive modifier
i
ist die alternative zu eregi:Finden Sie die komplette Referenz zu PCRE-syntax im PHP Handbuch, sowie eine Liste der Unterschiede zwischen POSIX und PCRE regex zu helfen, die Umwandlung der Ausdruck.
Jedoch in Ihrer einfachen Beispiel würden Sie nicht mit einem regulären Ausdruck:
Es ist besonders erwähnenswert, dass bei Verwendung von passenden Klammern, dann werden Sie nicht müssen escape-Zeichen ", nur weil es das gleiche ist wie das Trennzeichen", wie Sie auch mit anderen Symbolen, wie der
/^\/hello/
Beispiel.(a(b)c)
ist eine vollkommen gültige, separierte PCRE. Ich persönlich benutze gerne Klammern()
um mich daran zu erinnern, dass das erste erfasste Entsprechung ist die ganze Sache.Kann ich sagen, dass ich freaking hasse PHP! (Nur, dass. Sonst nichts.) Ich Suche diese Antworten aus, wenn mein shared-web-hosting-server wird aktualisiert auf eine neue version und die
error_log
s erhalten voll mit diesen Warnungen:PHP Deprecated: Function ereg() is deprecated in...
. Argh!wie konvertieren? $regex = $e . '((\.[^\.' . $e . '][^' . $e . ']*)|(\.\.[^' . $e . ']+)|([^\.][^' . $e . ']*))' . $e . '\.\.' . $e; preg_math es tust, die Arbeit, indem Sie nur / modifier /
InformationsquelleAutor
Ereg Ersatz mit preg(seit PHP 5.3.0) war rechts zu bewegen, zu unseren Gunsten.
preg_match, die eine zu Perl kompatible syntax für reguläre Ausdrücke, ist Häufig die schnellere alternative zu ereg.
Sie wissen sollten 4 wichtigsten Dinge, die zu port ereg Muster zu preg:
Hinzufügen Trennzeichen(/):
'pattern' => '/pattern/'
Flucht Trennzeichen wenn es ein Teil des Musters:
'patt/ern' => '/patt\/ern/'
Erreichen Sie programmgesteuert in folgender Weise:
$old_pattern = '<div>.+</div>';
$new_pattern = '/' . addcslashes($old_pattern, '/') . '/';
eregi(case-insensitive matching):
'pattern' => '/pattern/i'
Also, wenn Sie mit eregi-Funktion für den Fall, insenstive passend, fügen Sie einfach 'ich' in das Ende der neuen Muster('/Muster/').
ASCII-Werte: ereg, wenn Sie die Nummer in das Muster, es wird davon ausgegangen, dass Sie beziehen sich auf die ASCII-Darstellung des Zeichens. Aber in preg, eine Zahl, die nicht so behandelt, als ASCII-Wert. Also, wenn Sie Ihre Muster enthalten ASCII-Wert in der ereg-expression(zum Beispiel: neue Zeile, Tabulator, etc), dann konvertieren Sie es in hexadezimale und Präfix es mit \x.
Example: 9(tab) becomes \x9 or alternatively use \t.
InformationsquelleAutor Sumoanand
Gibt es mehr Unterschiede zwischen
ereg()
undpreg_replace()
als nur die syntax:Rückgabewert:
FALSE
ereg()
zurückFALSE
,preg_match()
zurück0
ereg()
gibt die string-Länge oder1
,preg_match()
gibt immer1
Resultierende array von übereinstimmenden Teilstrings: Wenn substring nicht gefunden (
(b)
im...a(b)?
), das entsprechende Element inereg()
ErgebnisFALSE
, während inpreg_match()
es wird nicht untergehen.Wenn man nicht mutig genug, um zu konvertieren, seine oder Ihre
ereg()
zupreg_match()
, kann er oder Sie verwenden mb_ereg(), die noch verfügbar ist, in PHP 7.InformationsquelleAutor Roman Hocke
Von der PHP-version 5.3,
ereg
ist veraltet.Umzug von
ereg
zupreg_match
ist nur eine kleine änderung in unserem Muster.Zuerst müssen Sie zum hinzufügen von Trennzeichen-code, z.B.:
zu
Für
eregi
case-insensitive matching, setzeni
nach dem letzten Trennzeichen, z.B.:zu
InformationsquelleAutor Narayan