Wie kann ich ereg-Ausdrücke in PHP in preg umwandeln?

Lesezeit: 5 Minuten

Wie kann ich ereg Ausdrucke in PHP in preg umwandeln
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

  • @ 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

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 idie 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

  • Wunderbare Erklärung! Ich möchte nur einen Sonderfall hinzufügen, in dem Sie konvertieren ereg zu preg_match und Sie müssen nur die Trennzeichen und nicht die reservierten Zeichen maskieren (da sie bereits als Sonderzeichen funktionierten, wollen wir sie nicht maskieren): preg_match(‘/’.str_replace(‘/’,’\/’,$expr).’/’, $str);

    – Lolito

    5. November 2013 um 10:04 Uhr

  • Besonders erwähnenswert ist, dass Sie, wenn Sie passende Klammern verwenden nicht Sie müssen alle Zeichen maskieren, “nur weil es mit dem Trennzeichen identisch ist”, wie Sie es mit anderen Symbolen wie dem tun /^\/hello/ Beispiel. (a(b)c) ist eine vollkommen gültige, abgegrenzte PCRE. Ich persönlich verwende gerne Klammern () um mich daran zu erinnern, dass das erste gefangene Streichholz das Ganze ist.

    – Niet the Dark Absol

    28. März 2017 um 9:59 Uhr

  • wie konvertiert man das? $regex = $e . ‘((\.[^\.’ . $e . ‘][^’ . $e . ‘]*)|(\.\.[^’ . $e . ‘]+)|([^\.][^’ . $e . ‘]*))’ . $e . ‘\.\.’ . $e; zu preg_math funktioniert es nicht, indem man einfach / modifier / hinzufügt

    – bdalina

    20. November 2017 um 5:45 Uhr

Wie kann ich ereg Ausdrucke in PHP in preg umwandeln
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:

  1. Trennzeichen hinzufügen(/): 'pattern' => '/pattern/'

  2. 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/";

  3. 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.

  4. 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.

1647095647 718 Wie kann ich ereg Ausdrucke in PHP in preg umwandeln
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:

  • Rückgabewert:

    • Auf Fehler: beide kehren zurück FALSE
    • Auf kein Spiel: ereg() kehrt zurück FALSE, preg_match() kehrt zurück 0
    • Auf Spiel: ereg() gibt die Zeichenfolgenlänge zurück oder 1, preg_match() kehrt immer zurück 1
  • Resultierendes Array von übereinstimmenden Teilzeichenfolgen: Wenn eine Teilzeichenfolge überhaupt nicht gefunden wird ((b) in ...a(b)?), entsprechendes Element in ereg() Ergebnis wird FALSEwährend in preg_match() es wird überhaupt nicht eingestellt.

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.

993990cookie-checkWie kann ich ereg-Ausdrücke in PHP in preg umwandeln?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy