Aktueller Standort: Startseite> Neueste Artikel> So implementieren Sie die benannte Gruppierung bei Verwendung der Funktion MB_Eregi_Replace (obwohl MB_Eregi_Replace nicht mit der Namensgruppierung nativ unterstützt wird, kann sie über Workarounds implementiert werden)

So implementieren Sie die benannte Gruppierung bei Verwendung der Funktion MB_Eregi_Replace (obwohl MB_Eregi_Replace nicht mit der Namensgruppierung nativ unterstützt wird, kann sie über Workarounds implementiert werden)

M66 2025-07-18

In PHP ist MB_Eregi_Replace eine regelmäßige Ersatzfunktion für Multibyte-Zeichenfolgen und unterstützt Fall-unempfindliche Übereinstimmungen. Es basiert auf der regelmäßigen Expressionssyntax von POSIX und unterstützt daher keine benannte Gruppierung wie PCRE ( PREG_* -Serie -Funktionen). Die benannte Gruppierung ermöglicht aussagekräftige Namen für bestimmte Teile regulärer Ausdrücke, um die Wartung und das Lesen von Code zu erleichtern.

In diesem Artikel wird vorgestellt, wie der Effekt der benannten Gruppierung simuliert wird, obwohl MB_Eregi_Replace die benannte Gruppierung nicht nativ unterstützt. Einige Problemumgehungen können jedoch verwendet werden, um den Effekt der benannten Gruppierung zu simulieren.


1. Beschränkungen für MB_Eregi_Replace und Namensgruppierung

Die reguläre Syntax, die von MB_Eregi_Replace verwendet wird, unterstützt weder mit dem PCRE-genannten Gruppierungen wie ("<Name> -Mustern) noch die Gruppierungskennung als Zahlen.

Beispiel:

 $pattern = '([a-z]+)'; // Normale Gruppierung

Aber es kann nicht geschrieben werden als:

 $pattern = '(?<word>[a-z]+)'; // Namensgruppierung wird nicht unterstützt

Wenn Sie daher auf den Inhalt einer bestimmten Gruppe verweisen müssen, können Sie sie nur durch numerische Indizes wie \ 1 , \ 2 usw. indexieren.


2. Verwenden Sie die digitale Gruppierung in Kombination mit Ersatzrückruf, um den Effekt der "benannten Gruppierung" zu erreichen.

Obwohl mb_eregi_replace benannte grupping nicht direkt verwenden kann, können wir es in Kombination mit Rückruffunktionen während der Gruppierung und des Austauschs simulieren.

MB_Eregi_Replace selbst hat jedoch keine Rückrufversion. Wir können zuerst die Funktionen der MB_Ereg_Search -Serie verwenden, um den Gruppierinhalt zu erfassen und dann die Ersatzlogik in PHP zu implementieren.

Probenfluss:

  1. Verwenden Sie mb_ereg_search_init und mb_ereg_search, um die Zeichenfolge nacheinander zu entsprechen.

  2. Nach jeder Übereinstimmung wird der Gruppierungsinhalt manuell erhalten und ersetzt.

  3. Verwenden Sie PHP -Arrays, um die Struktur benannter Gruppen zu simulieren.


3. Beispielcode

Der folgende Code zeigt, wie die Funktionen MB_Ereg_Search verwendet werden, um Gruppinhalte zu erfassen, die benannte Gruppierung zu simulieren und den vollständigen Austausch zu vervollständigen:

 <?php

// Ausstehende Zeichenfolge
$text = "User: alice, Email: alice@example.com";

// POSIX Stilregelmäßigkeit,Zwei Gruppen,Benutzername und E -Mail
$pattern = 'User: ([a-z]+), Email: ([a-z0-9._%-]+@[a-z0-9.-]+\.[a-z]{2,})';

// Suche initialisieren
mb_ereg_search_init($text, $pattern, 'i'); // iZeigt den Fall unempfindlich an

$result = '';
$offset = 0;

while ($match = mb_ereg_search_pos()) {
    // Nehmen Sie die Startposition und Länge des Spiels
    list($start, $length) = $match;

    // Holen Sie sich die vollständige passende Zeichenfolge
    $fullMatch = mb_substr($text, $start, $length);

    // Holen Sie sich die erfassten Gruppierungsinhalte
    $regs = mb_ereg_search_getregs();

    // Simulieren Sie benannte Gruppierung
    $namedGroups = [
        'username' => $regs[1],
        'email' => $regs[2],
    ];

    // Ersatzlogik behandeln,Kapitalisieren Sie zum Beispiel den Benutzernamen,Versteckter Teil der E -Mail
    $replacement = "User: " . strtoupper($namedGroups['username']) . ", Email: " . maskEmail($namedGroups['email']);

    // Spleißergebnisse
    $result .= mb_substr($text, $offset, $start - $offset) . $replacement;

    $offset = $start + $length;

    // Suchen Sie weiter
    mb_ereg_search_setpos($offset);
}

// Spleißen die verbleibenden Teile
$result .= mb_substr($text, $offset);

echo $result;

// Helferfunktionen,E -Mail -Abschnitt ausblenden
function maskEmail($email) {
    $parts = explode('@', $email);
    $name = $parts[0];
    $domain = $parts[1];
    $maskedName = substr($name, 0, 1) . str_repeat('*', max(0, strlen($name) - 2)) . substr($name, -1);
    return $maskedName . '@' . $domain;
}
?>

4. Beschreibung

  • Da MB_Eregi_Replace Callbacks nicht direkt verwenden kann, verwenden wir MB_Ereg_Search_init und zugehörige Funktionen, um die Schleifenpassung zu erreichen und den Ersatz manuell zu verarbeiten.

  • Verwenden Sie das $ Regs -Array, um den Gruppierungsinhalt zu erfassen, und simulieren Sie "Named Grouping" über die Arrayschlüsselnamen, um den Code klarer zu machen.

  • Der Ersatzprozess wird vollständig im PHP -Code behandelt und kann eine beliebige komplexe Logik implementieren.

  • Im Beispiel werden die Benutzernamenkapitalisierung und das Verstecken einiger Zeichen in der Mailbox implementiert.


5. Zusammenfassung

Obwohl die Funktion MB_Ereg_Replace selbst nicht die benannte Gruppierung unterstützt, können wir über die Funktionen der MB_Ereg_Search -Serie in Kombination mit PHP -Codeverarbeitung ähnliche benannte Gruppierungseffekte erzielen und die Lesbarkeit und Wartung der Code verbessern.

Wenn Sie komplexere reguläre Funktionen und benannte Gruppierungsunterstützung benötigen, wird empfohlen, PREG_REPLACE_CALLBACK zu verwenden. Es unterstützt jedoch keine so starke Multibyte -Codierung wie die Familie MB_ereg .