In PHP ist die Funktion preg_replace_callback_array ein leistungsstarkes Tool, mit dem Sie verschiedene Rückruffunktionen für mehrere reguläre Ausdrucksmuster angeben können. Diese Funktion assoziiert das Muster mit der Rückruffunktion über ein assoziatives Array und ersetzt es nacheinander. Wie wird jedoch die Ausführungsreihenfolge der Rückruffunktion ermittelt?
Die Funktion preg_replace_callback_array akzeptiert zwei Parameter: Der erste Parameter ist ein assoziatives Array, der Schlüssel des Arrays ist das reguläre Ausdrucksmuster und der Wert ist die Rückruffunktion. Der zweite Parameter ist die Eingangszeichenfolge. Funktionen werden das Muster-von-Pattern-Matching und den Austausch von Eingangszeichenfolgen in der Reihenfolge des im Array definierten Musters ersetzen.
<?php
$patterns = [
'/hello/' => function ($matches) {
return "Hi";
},
'/world/' => function ($matches) {
return "Earth";
}
];
$string = "hello world! hello world!";
$result = preg_replace_callback_array($patterns, $string);
echo $result; // Ausgabe:Hi Earth! Hi Earth!
?>
In diesem Beispiel "Hello World! Hello World!" wird zuerst mit Hallo zusammengefügt und dann durch HI ersetzt; Dann wird es mit der Welt abgestimmt und durch die Erde ersetzt. Die Ausführungsreihenfolge der Rückruffunktion wird gemäß der Reihenfolge der Musterdefinition im Array bestimmt.
Die Ausführungsreihenfolge der Rückruffunktion in preg_replace_callback_array wird durch die folgenden Faktoren strikt bestimmt:
Die Reihenfolge der Muster in Arrays : Die Reihenfolge der Ausführung von Rückruffunktionen wird durch die Reihenfolge der Schlüssel (d. H. Regelmäßige Ausdrucksmuster) des übergebenen Musterarrays bestimmt. PHP beginnt mit dem ersten Muster des Arrays und führt die Rückruffunktion eins nach dem anderen aus.
Priorität der Musteranpassung : Wenn mehrere reguläre Expressionsmuster derselben Position übereinstimmen (z. B. zwei Muster übereinstimmen demselben Teil in einer Zeichenfolge), wählt PHP das erste Matching -Muster gemäß der Reihenfolge des Musterarrays aus, um die Rückruffunktion auszuführen. Daher ist die Reihenfolge der Muster von entscheidender Bedeutung.
Auswirkungen der globalen Übereinstimmung : Wenn ein Muster einem Teil der Zeichenfolge entspricht und ersetzt wird, kann der Inhalt der neuen Zeichenfolge die Übereinstimmung nachfolgender Muster beeinflussen. Daher wirkt sich der ersetzte String -Inhalt auf die Ausführung nachfolgender Rückruffunktionen aus.
<?php
$patterns = [
'/o/' => function ($matches) {
return "O";
},
'/world/' => function ($matches) {
return "Universe";
}
];
$string = "hello world!";
$result = preg_replace_callback_array($patterns, $string);
echo $result; // Ausgabe:hellO Universe!
?>
In diesem Beispiel, obwohl das / worde / muster der Welt entspricht , ist die endgültige Ausgabe das Hello Universe! .
Die Reihenfolge, in der die Rückruffunktion ausgeführt wird, wird besonders wichtig, wenn mehrere Muster derselben Position oder demselben Substring übereinstimmen. Wenn Sie sicherstellen möchten, dass zuerst eine bestimmte Rückruffunktion ausgeführt wird, sollten Sie das entsprechende reguläre Ausdrucksmuster vor das Array stellen.
Angenommen, Sie haben eine Zeichenfolge mit unterschiedlichen Links und HTML -Tags und möchten den Link zuerst und dann die HTML -Tags ersetzen. Zu diesem Zeitpunkt sollte das Muster des Verknüpfungsersatzes vor dem Muster des HTML -Tag -Austauschs liegen.
<?php
$patterns = [
'/https?:\/\/\S+/' => function ($matches) {
return "<a href='{$matches[0]}'>Link</a>";
},
'/<b>.*?<\/b>/' => function ($matches) {
return "<strong>{$matches[0]}</strong>";
}
];
$string = "Visit https://m66.net for more <b>information</b>!";
$result = preg_replace_callback_array($patterns, $string);
echo $result; // Ausgabe:Visit <a href='https://m66.net'>Link</a> for more <strong><b>information</b></strong>!
?>
In diesem Beispiel ersetzt /https?: \/\/\ S+/ modus den Link zuerst und /<B>.*?<\/b>/ Modus ersetzt das <b> -Tag. Das Endergebnis ist, dass sowohl der Link als auch das Tag korrekt ersetzt werden.
Mit der Funktion PRG_REPLACE_CALLBACK_Array können Sie mehrere reguläre Ausdrucksmuster und ihre Rückruffunktionen über ein assoziatives Array definieren. Die Reihenfolge der Ausführung der Rückruffunktion wird durch die Reihenfolge der Muster im Musterarray bestimmt. Wenn mehrere Muster demselben Teil übereinstimmen, führt das bevorzugte Matching -Muster zunächst die entsprechende Rückruffunktion aus. Wenn Sie daher preg_replace_callback_array verwenden, stellen Sie daher sicher, dass die Reihenfolge der Musterarrays Ihren Anforderungen entspricht.