In PHP ist die Funktion mb_eregi_replace eine multibytensichere regelmäßige Ersatzfunktion, die die von Fall unempfindlichen regelmäßigen Expressionsersatz unterstützt. Die Verwendung ist ähnlich wie Eregi_Replace , ist jedoch für Multibyte -Saiten optimiert.
Wenn Sie mb_eregi_replace zum Ersatz verwenden, möchte es in der Ersatzzeichenfolge $ 1 verwenden, um den Inhalt der ersten Erfassungsgruppe zu verweisen, z. B.:
$pattern = 'pattern';
$replacement = '$1 something';
mb_eregi_replace($pattern, $replacement, $subject);
Wenn jedoch im regulären Expressionsmuster keine Gruppierung definiert ist (d. H. In Klammern eingeschlossen), hat 1 $ 1 keinen entsprechenden Inhalt, und 1 $ wird als normale Zeichenfolge angesehen und wird nicht durch einen übereinstimmenden Inhalt ersetzt.
Dies kann dazu führen, dass das Ersatzergebnis nicht erwartet wird.
Spezielle Symbole wie $ 1 und $ 2 werden verwendet, um den Inhalt der Erfassungsgruppe in einem regulären Ausdruck zu verweisen. Wenn der reguläre Ausdruck nicht mit Klammern gruppiert ist, sind diese Referenzen ungültig.
Zum Beispiel:
$pattern = 'hello';
$replacement = '$1 world';
$subject = 'hello';
// Keine Gruppierung,$1 Kein entsprechender Inhalt
echo mb_eregi_replace($pattern, $replacement, $subject);
Das Ergebnis dieses Code ist:
$1 world
Statt der imaginären:
hello world
Wenn Sie im Ersatzergebnis 1 US -Dollar verwenden möchten, müssen Sie sicherstellen, dass im regulären Ausdruck eine entsprechende Erfassungsgruppe vorhanden ist.
Ändern Sie beispielsweise den Modus in:
$pattern = '(hello)';
$replacement = '$1 world';
$subject = 'hello';
echo mb_eregi_replace($pattern, $replacement, $subject);
Das Ausgangsergebnis ist:
hello world
Beachten:
Verwenden Sie Klammern, um den zu verwiesenen Teil zu wickeln, wodurch die Erfassungsgruppierung angezeigt wird.
$ 1 kann verwendet werden, auch wenn nur die gesamte passende Zeichenfolge erfasst wird.
In einigen regulären Ersatzfunktionen repräsentiert $ 0 die gesamte passende Zeichenfolge. Leider unterstützt MB_Eregi_Replace nicht 0 US -Dollar und kann sich nur auf 1 , $ 2 usw. in Gruppierungen beziehen.
Wenn es nicht bequem ist, das Muster zum Hinzufügen einer Gruppierung zu ändern, können Sie eine Ersatzfunktion verwenden, die stattdessen Rückruffunktionen unterstützt, z. B. mb_ereg_replace_callback , und dann die übereinstimmende Logik im Rückruf verarbeiten.
Beispiel:
$pattern = 'hello';
$subject = 'hello';
$result = mb_ereg_replace_callback($pattern, function ($matches) {
// $matches[0] Es ist das ganze Match
return $matches[0] . ' world';
}, $subject);
echo $result;
Ausgabe:
hello world
MB_Eregi_Replace verwendet $ 1 und $ 2, um sich auf den Gruppierungsinhalt zu beziehen, und es ist erforderlich, sicherzustellen, dass die entsprechende Erfassungsgruppierung im regulären Ausdruck vorhanden ist.
Wenn es keine Gruppierung gibt, wird 1 US -Dollar nicht durch den passenden Inhalt ersetzt, sondern als normale Zeichenfolge behandelt.
Wenn Sie keine Gruppe hinzufügen möchten oder nicht, wird empfohlen, die Rückruffunktion zu verwenden, um einen komplexen Ersatz zu implementieren.