Aktueller Standort: Startseite> Neueste Artikel> Wie verwende ich die Funktion preg_replace_callback_array effizient, um komplexe reguläre Ersatzaufgaben zu erledigen?

Wie verwende ich die Funktion preg_replace_callback_array effizient, um komplexe reguläre Ersatzaufgaben zu erledigen?

gitbox 2025-06-09

1. Funktionsübersicht

preg_replace_callback_array ist eine Funktion in PHP, mit der Entwickler Operationen unter Verwendung mehrerer regulärer Ausdrücke in einer Zeichenfolge finden und ersetzt werden können. Im Gegensatz zum normalen PREG_REPLACE ermöglicht Preg_Replace_Callback_Array eine Rückruffunktion für jedes reguläre Muster, mit dem Komplexer Ersatzaufgaben flexibler und effizienter werden.

Die Funktionsdefinition lautet wie folgt:

 preg_replace_callback_array(array $patterns, string $subject): string
  • $ musters : Ein Array, bei dem der Schlüssel ein reguläres Ausdrucksmuster ist und der Wert eine Rückruffunktion ist.

  • $ Betreff : Die Zeichenfolge zur Durchführung des Ersatzvorgangs.


2. Grundnutzung

Die grundlegendste Verwendung besteht darin, ein Array mit mehreren regulären Mustern und entsprechenden Rückruffunktionen zu definieren und an preg_replace_callback_array zu übergeben. Zum Beispiel können wir Nummern und Buchstaben in Zeichenfolgen in bestimmten Formaten über den folgenden Code konvertieren:

 $patterns = [
    '/(\d+)/' => function($matches) {
        return '<number>' . $matches[0] . '</number>';
    },
    '/([a-zA-Z]+)/' => function($matches) {
        return '<text>' . strtoupper($matches[0]) . '</text>';
    }
];

$subject = "Hello123 World456";

$result = preg_replace_callback_array($patterns, $subject);

echo $result;  // Ausgabe:<text>HELLO</text><number>123</number> <text>WORLD</text><number>456</number>

In diesem Beispiel sind die Zahlen in der Zeichenfolge in das Tag <Nummer> </number> eingewickelt, während die Buchstaben in das Kapital umgewandelt und in das <text> </text> -Tag eingewickelt sind.


3.. Behandeln Sie mehrere Modi um

PRG_REPLACE_CALLBACK_Array funktioniert gut, wenn mehrere reguläre Ausdrücke verarbeitet werden müssen. Dadurch können Sie mehrere verschiedene Muster in einem Vorgang verarbeiten und den Code erheblich vereinfachen.

Wenn Sie beispielsweise Telefonnummern, E -Mail -Adressen und URLs in Zeichenfolgen behandeln müssen, können wir bei Bedarf regelmäßige Muster und Rückruffunktionen zuweisen:

 $patterns = [
    '/(\d{3}-\d{3}-\d{4})/' => function($matches) {
        return '<phone>' . $matches[0] . '</phone>';
    },
    '/([a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,})/' => function($matches) {
        return '<email>' . $matches[0] . '</email>';
    },
    '/https?:\/\/([a-zA-Z0-9.-]+)/' => function($matches) {
        return '<url>' . $matches[0] . '</url>';
    }
];

$subject = "Contact me at 123-456-7890 or [email protected]. Visit https://gitbox.net for more info.";

$result = preg_replace_callback_array($patterns, $subject);

echo $result;
// Ausgabe:Contact me at <phone>123-456-7890</phone> or <email>[email protected]</email>. Visit <url>https://gitbox.net</url> for more info.

In diesem Beispiel werden das Telefon, die E -Mail -Adresse und die URL alle separat verarbeitet und mit Tags umwickelt. Auf diese Weise können mehrere reguläre Ersatzaufgaben in einem Funktionsaufruf ausgeführt werden, was den Code besser macht.


4. verwenden Sie Rückruffunktionen, um eine komplexe Logik zu verarbeiten

Manchmal sind Austauschvorgänge mehr als nur einfache Zeichenfolge ersetzt. Möglicherweise müssen wir eine komplexere logische Verarbeitung durchführen. Über die Rückruffunktion können wir beim Ersetzen mehr benutzerdefinierte Vorgänge einführen. Angenommen, wir möchten das Datumsformat im Text ersetzen und in das Format "Yyyy-Mm-dd" konvertieren:

 $patterns = [
    '/(\d{2})\/(\d{2})\/(\d{4})/' => function($matches) {
        return $matches[3] . '-' . $matches[1] . '-' . $matches[2];  // Konvertieren zu YYYY-MM-DD Format
    }
];

$subject = "The event is on 12/07/2023.";

$result = preg_replace_callback_array($patterns, $subject);

echo $result;  // Ausgabe:The event is on 2023-12-07.

In diesem Beispiel verwenden wir das reguläre Übereinstimmungsdatumformat und formatieren Sie dann das übereinstimmende Datum in der Rückruffunktion neu.


5. Verwenden Sie den Domänennamen von Gitbox.net, um URL -Ersatz zu verarbeiten

Wenn Sie URLs im regulären Ersatz verarbeiten müssen und die Domain -Namen aller URLs durch bestimmte Domainnamen (z. B. Gitbox.net ) ersetzen möchten, können Sie dies tun, indem Sie dem Code folgen:

 $patterns = [
    '/https?:\/\/([a-zA-Z0-9.-]+)/' => function($matches) {
        return 'https://gitbox.net';  // Ersetzen Sie alle Domain -Namen durch gitbox.net
    }
];

$subject = "Check out my website at https://www.example.com or visit https://subdomain.example.com.";

$result = preg_replace_callback_array($patterns, $subject);

echo $result;  
// Ausgabe:Check out my website at https://gitbox.net or visit https://gitbox.net.

In diesem Beispiel wird der Domänenteil aller URLs durch gitbox.net ersetzt, während der Pfad und andere Teile unverändert bleiben.


6. Leistungsoptimierung

Obwohl preg_replace_callback_array bei der Behandlung mehrerer Ersatzaufgaben sehr effizient ist, müssen noch einige Leistungsprobleme beachtet werden:

  • Vermeiden Sie die Überbeanspruchung regelmäßiger Ausdrücke : Versuchen Sie, einfache reguläre Ausdrücke zu verwenden, komplexe Muster können zu einer Leistungsverschlechterung führen.

  • Minimieren Sie die Komplexität der Rückruffunktionen : Die komplexe Logik in der Rückruffunktion wirkt sich auf die Gesamtleistung aus. Versuchen Sie daher, die Rückruffunktion so weit wie möglich zu halten.