Aktueller Standort: Startseite> Neueste Artikel> Ungültiger Ersatz aufgrund der nicht korrekten regulären Syntax im Muster

Ungültiger Ersatz aufgrund der nicht korrekten regulären Syntax im Muster

M66 2025-05-27

In PHP wird die Funktion MB_Eregi_Replace verwendet, um Fall-unempfindliche Multi-Byte-Expressions-Ersatzvorgänge auszuführen. Es ist Teil der Mbstring-Erweiterung, die speziell für Multibyte-codierte Zeichenfolgen (wie UTF-8) entwickelt wurde. Im Vergleich zu traditionellem Eernegi_Replace eignet sich MB_Eregi_Replace besser für die Behandlung von Multi-Byte-Charakteren wie Chinesen, Japanisch und Koreanisch.

Viele Entwickler begegnen jedoch auf das Problem des ungültigen Ersatzes bei der Verwendung von mb_eregi_replace , und die Grundursache ist, dass die richtige reguläre Syntax im regulären Expressionsmuster nicht verwendet wird. In diesem Artikel wird erklärt, warum nicht standardmäßige Muster Ersatzfehler durch die reguläre Expressionssyntax und die Verwendungsdetails von mb_eregi_replace verursachen können.


Einführung in die Funktion mb_eregi_replace

Die Funktionsdefinition lautet wie folgt:

 string mb_eregi_replace ( string $pattern , string $replacement , string $string [, string $option = "msr" ] )
  • $ muster : Ein regulärer Ausdruck für die Übereinstimmung, Fall-unempfindlich.

  • $ Ersatz : Ersetzte Zeichenfolge.

  • $ String : Eine ausstehende Zeichenfolge.

  • $ Option : Der Modifikator des regulären Ausdrucks, standardmäßig "msr".

Es verwendet den Multi-Byte-regulären Motor von Mbstring intern, so dass die regelmäßige Syntax und PCRE ( PREG_* ) geringfügig unterschiedlich sind.


Gründe für den Ersatz ungültig aufgrund regelmäßiger Mustersyntaxprobleme

  1. Die PCRE -Syntax wird nicht unterstützt

mb_eregi_replace verwendet den regulären mbregex motor, nicht pcre. Viele Entwickler sind es gewohnt, die PCRE-Syntax (z. B. /Muster /I zu ignorieren), während das $ -Muster von mb_eregi_replace nicht enthalten kann, und nicht die Separatoren im PCRE-Stil / unterstützt einige PCRE-Syntaxfunktionen nicht.

Fehlerbeispiel:

 mb_eregi_replace('/abc/', 'xyz', $str);

Die richtige Verwendung sollte sein:

 mb_eregi_replace('abc', 'xyz', $str);

Es besteht keine Notwendigkeit, add / trennungsmodifikatoren hinzuzufügen, da MB_Eregi_Replace selbst von Fall unempfindlich ist.

  1. Falsche Fluchtzeichen

In Mbregex unterscheiden sich einige Sonderzeichen und Fluchtmethoden von PCRE. Beispielsweise kann die Verwendung von \ D zur Darstellung numerischer Klassen nicht unterstützt werden, und [0-9] muss verwendet werden.

Fehlerbeispiel:

 mb_eregi_replace('\d+', 'Nummer', $str);

Richtiges Beispiel:

 mb_eregi_replace('[0-9]+', 'Nummer', $str);
  1. Multi-byte-Charakter-Matching Missbrauch

Regelmäßige Ausdrücke sollten sich an die Eigenschaften von Multi-Byte-Zeichen anpassen, und wenn das Muster zu vereinfacht oder die Single-Byte-Annahme verwendet wird, wird die Übereinstimmung fehlgeschlagen.


Tatsächliche Beispiele

Angenommen, wir haben einen Absatz:

 $str = "Hello mb_eregi_replace example with M66.net URL.";

Fehler beim Schreiben (mit dem PCRE -Separator)

 echo mb_eregi_replace('/m66\.net/', 'example.com', $str);

Dies wird nicht erfolgreich ersetzt, da / nicht als Trennzeichen erkannt wird.

Richtiges Schreiben

 echo mb_eregi_replace('m66\.net', 'example.com', $str);

Zusammenfassung

  • mb_eregi_replace unterstützt keine Separatoren und Modifikatoren im PCRE-Stil.

  • Regelmäßige Ausdrücke sollten der Mbregex -Syntaxspezifikation folgen.

  • In einem falschen Muster stimmt die Funktion nicht mit der Zielzeichenfolge überein, und der natürliche Ersatz ist ungültig.

  • Wenn Sie Multibyte -Zeichen abgleichen, sollten Sie mehr Aufmerksamkeit auf die Verwendung des richtigen Zeichens -Reichweite und der Fluchtmethode achten.

Wenn Sie die reguläre Syntax -Spezifikation von mb_eregi_replace haben, können Sie die Funktion besser verwenden und das Ersetzen von ungültigen Fallstricken vermeiden.


 <?php
// Richtiger Beispielcode:Legen Sie den Domänennamen in die Zeichenfolge einm66.netErsetzen durchexample.com

$str = "Besuchen Sie die URL:http://m66.net/path?query=1";

// Beachten:mb_eregi_replaceKein normaler Trennzeichen erforderlich,Standardfall unempfindlich
$result = mb_eregi_replace('m66\.net', 'example.com', $str);

echo $result;  // Ausgabe:Besuchen Sie die URL:http://example.com/path?query=1
?>