Erwartete Lebensdauer von ereg, Migration zu preg

8

Ich arbeite an einer großen PHP-Anwendung (& gt; 1 Million Zeilen, 10 Jahre alt), die ereg und ereg_replace - aktuell 1.768 eindeutige reguläre Ausdrücke in 516 Klassen ausgiebig verwendet.

Ich bin mir sehr bewusst, warum ereg veraltet ist, aber eine deutliche Migration zu preg könnte sehr stark sein.

Weiß jemand, wie lange ereg support wahrscheinlich in PHP beibehalten wird, und / oder haben Sie einen Ratschlag für die Migration zu preg in diesem Umfang. Ich vermute, automatisierte Übersetzung von EREG zu Preg ist unmöglich / unpraktisch?

    
Oliver Emberton 03.05.2011, 14:47
quelle

4 Antworten

2

Ich bin mir nicht sicher, ob ereg entfernt wird, aber meine Wette ist ab PHP 6.0.

Was Ihr zweites Problem anbelangt (Übersetzung von ereg in preg ) scheint nicht so schwer zu sein, wenn Ihre Anwendung & gt; 1 Million Zeilen sicher müssen Sie die Mittel haben, um jemanden zu bekommen, der diesen Job für höchstens eine Woche macht. Ich würde alle ereg_ Instanzen in Ihrem Code grep und einige Makros in Ihrer bevorzugten IDE einrichten (einfache Sachen wie das Hinzufügen von Trennzeichen, Modifikatoren und so weiter).

Ich wette, dass die meisten der 1768 Regexes mit einem Makro portiert werden können, und die anderen, naja, ein gutes Paar Augen.

Eine andere Möglichkeit könnte sein, Wrapper um die Funktionen ereg zu schreiben, wenn diese nicht verfügbar sind, indem die Änderungen nach Bedarf:

%Vor%

Sie bekommen die Idee. Auch das PEAR-Paket PHP Compat könnte eine praktikable Lösung sein.

  

Unterschiede zu POSIX Regex

     

Ab PHP 5.3.0 der POSIX Regex   Erweiterung ist veraltet. Es gibt a   Anzahl der Unterschiede zwischen POSIX   Regex und PCRE Regex. Diese Seite listet auf   die bemerkenswertesten, die sind   notwendig, um beim Konvertieren zu wissen   PCRE.

     
  1. Die PCRE-Funktionen erfordern, dass das Muster durch Trennzeichen eingeschlossen ist.
  2.   
  3. Im Gegensatz zu POSIX verfügt die Erweiterung PCRE nicht über dedizierte Funktionen für   Groß- / Kleinschreibung nicht beachten. Stattdessen,   Dies wird unter Verwendung des / i-Musters unterstützt   Modifikator. Andere Mustermodifikatoren sind   auch verfügbar zum Ändern der   passende Strategie.
  4.   
  5. Die POSIX-Funktionen finden die längste der am weitesten links liegenden Übereinstimmung, aber   PCRE stoppt bei der ersten gültigen Übereinstimmung.   Wenn die Zeichenfolge überhaupt nicht übereinstimmt   macht keinen Unterschied, aber wenn es übereinstimmt   es kann dramatische Auswirkungen auf beide haben   die resultierende Übereinstimmung und die Übereinstimmung   Geschwindigkeit. Um diesen Unterschied zu veranschaulichen,   Betrachte das folgende Beispiel von   "Reguläre Ausdrücke beherrschen" von   Jeffrey Friedl. Verwenden des Musters   eins (selbst)? (selbstgenügsam)? auf der   string selbst mit PCRE   wird dazu führen, sich selbst anzupassen, aber   mit POSIX wird das Ergebnis das sein   vollständige Zeichenfolge selbst ausreichend. Beide   (Unter) Zeichenketten entsprechen dem Original   Zeichenfolge, aber POSIX erfordert, dass die   Am längsten sei das Ergebnis.
  6.   
    
Alix Axel 03.05.2011, 14:56
quelle
2

Meine Intuition sagt, dass sie ereg nicht absichtlich entfernen werden. PHP unterstützt immer noch wirklich alte und veraltete Sachen wie register globals. Es sind einfach zu viele veraltete Apps da draußen. Es gibt jedoch eine kleine Chance, dass die Erweiterung entfernt werden muss, weil jemand eine ernsthafte Sicherheitslücke findet und es niemanden gibt, der es reparieren kann.

Auf jeden Fall ist es erwähnenswert:

  1. Sie sind nicht gezwungen, Ihre PHP-Installation zu aktualisieren. Es ist ziemlich üblich, dass veraltete Server legady Apps laufen lassen.

  2. Das PHP_Compat PEAR-Paket bietet eine einfache PHP-Version einiger nativer Funktionen. Wenn ereg verschwindet, ist es möglich, dass es hinzugefügt wird.

BTW ... Tatsächlich PHP 6 ist tot . Sie stellten fest, dass ihr Ansatz, PHP vollständig Unicode-kompatibel zu machen, schwieriger war, als sie dachten, und sie überdenken alles. Die Schlussfolgerung ist: Sie können niemals perfekte Vorhersagen treffen.

    
Álvaro González 03.05.2011 15:12
quelle
1

Ich hatte dieses Problem in einem viel kleineren Maßstab - eine Anwendung mehr als 10.000 Zeilen. In jedem Fall musste ich nur zu preg_replace() wechseln und Trennzeichen um das Regex-Muster setzen.

Jeder sollte das können - selbst ein Nicht-Programmierer kann eine Liste von Dateinamen und Zeilennummern erhalten.

Führen Sie dann einfach Ihre Tests aus, um nach Fehlern zu suchen, die behoben werden können.

ereg-Funktionen werden übrigens aus PHP6 entfernt - Ссылка .

    
Dan Blows 03.05.2011 14:59
quelle
0

Alle ereg Funktionen werden ab PHP 6 entfernt, glaube ich.

    
Craig Sefton 03.05.2011 14:55
quelle

Tags und Links