In PHP wird die Funktion mb_eregi_replace verwendet, um einen regelmäßigen Austausch von Multibyte -Zeichen durchzuführen und den Fall zu ignorieren. Es ist sehr nützlich für die Behandlung von Multibyte-kodierten Zeichenfolgen wie UTF-8. Wenn jedoch die Eingabezeichenfolge einige illegale Zeichen enthält (z. B. Sonderzeichen regulärer Ausdrücke nicht entkommen), führt dies häufig zu einem regelmäßigen Übereinstimmungsfehler oder einer Fehlerberichterstattung.
In diesem Artikel wird vorgestellt, wie Sie Zeichenfolgen vorbereiten, bevor Sie die Funktion mb_eregi_replace verwenden, um das Problem des regelmäßigen Ausdrucksfehlers aufgrund illegaler Zeichen zu vermeiden.
Der erste Parameter von mb_eregi_replace ist ein reguläres Expressionsmuster, der zweite Parameter ist der Ersatzinhalt, und der dritte Parameter ist der zu verarbeitende String.
Beispiel:
<?php
$text = "Hello World!";
$pattern = "world";
$replacement = "PHP";
echo mb_eregi_replace($pattern, $replacement, $text);
?>
Die Ausgabe ist:
Hello PHP!
Aber wenn $ muster oder anstehende Zeichenfolge unabgeordnete Sonderzeichen enthält, kann das Match scheitern und sogar eine Warnung wird geworfen.
Zu den Zeichen mit besonderer Bedeutung in regulären Ausdrücken gehören:
. \ + * ? [ ^ ] $ ( ) { } = ! < > | : -
Wenn diese Zeichen im Muster oder in der zu ersetzenden Zeichenfolge erscheinen, müssen sie korrekt entkommen.
PHPs eigene Funktion preg_quote () kann den Sonderzeichen in regulären Ausdrücken entkommen. MB_Eregi_Replace verwendet jedoch die Regelmäßigkeit der Mbregex -Erweiterung, nicht die PREG_* -Serie PCRE, und die Escape -Regeln sind etwas unterschiedlich, aber normalerweise entkommt Preg_quote die meisten Sonderzeichen sind noch gültig.
Beispiel:
<?php
$pattern_raw = "hello.world"; // . Es ist ein besonderer Charakter
$pattern = preg_quote($pattern_raw, '/'); // Fliehen as hello\.world
$text = "Hello World! hello.world test.";
echo mb_eregi_replace($pattern, "PHP", $text);
?>
Ausgabe:
Hello World! PHP test.
Wenn Sie befürchten, dass die anhängigen Zeichenfolgen Steuerzeichen (z. B. nicht gedruckte Zeichen) enthalten, die dazu führen, dass das Match fehlschlägt, können Sie sie zuerst mit Regelmäßigkeit filtern:
<?php
// Entfernen Sie nicht gedruckte Zeichen,Nur gemeinsame und Chinesen sind erhalten
$clean_text = preg_replace('/[^\P{C}\n]+/u', '', $text);
Das folgende Beispiel zeigt, wie Sie Sonderzeichen im Muster entkommen, bevor Sie MB_Eregi_Replace aufrufen und illegale Zeichen in der zu ersetzenden Zeichenfolge vorbereiten:
<?php
// Saiten und Muster, die ersetzt werden müssen
$pattern_raw = "foo.bar?"; // Enthält Sonderzeichen . Und ?
$replacement = "PHP";
$text = "Hello foo.bar? world! \x01\x02"; // Fügen Sie Kontrollzeichen ein
// 1. Sonderzeichen im Escape -Modus
$pattern = preg_quote($pattern_raw, '/');
// 2. Vorverarbeiteter Text,Steuerzeichen entfernen
$clean_text = preg_replace('/[^\P{C}\n]+/u', '', $text);
// 3. verwendenmb_eregi_replaceErsetzen(Fall ignorieren)
$result = mb_eregi_replace($pattern, $replacement, $clean_text);
echo $result;
?>
Ausgabe: