In PHP ist die String -Verarbeitung ein sehr wichtiger Bestandteil der täglichen Entwicklung. Die Funktion preg_replace_callback_array ist ein leistungsstarkes und flexibles Werkzeug, um Teile einer Zeichenfolge zu ersetzen, die mehreren regulären Ausdrucksmustern entspricht, und für jede Übereinstimmung verschiedene Rückruffunktionen aufrufen kann. In diesem Artikel wird und erläutert die Verwendung von preg_replace_callback_array durch das einfachste Beispiel und das komplexeste Beispiel, mit dem Sie seine Verwendung intensiv verstehen können.
Die Funktion PREG_REPLACE_CALLBACK_Array wurde nach PHP 7.0 hinzugefügt. Seine Funktion besteht darin, die entsprechenden Rückruffunktionen gemäß dem Musterarray mehrerer regulärer Ausdrücke zu rufen, um sie zu entsprechen und zu ersetzen.
Der Funktionsprototyp lautet wie folgt:
string preg_replace_callback_array(array $patterns_and_callbacks, string $subject [, int $limit = -1 [, int &$count ]])
$ musters_and_callbacks : Ein Array, der Schlüssel ist ein reguläres Ausdrucksmuster und der Wert ist die entsprechende Rückruffunktion.
$ Betreff : Die zu ersetzende Zeichenfolge.
$ limit : Die Anzahl der Ersetzungen ist begrenzt und der Ausfall ist nicht begrenzt.
$ count : Die Häufigkeit des Austauschs erfolgt.
<?php
$text = "Wenden Sie sich an E -Mail:info@m66.net,Besuchen Sie die offizielle Website:http://m66.net";
// Definieren Sie die Rückruffunktion
$callbacks = [
'/\b[\w.-]+@m66\.net\b/' => function($matches) {
return strtoupper($matches[0]); // E -Mail zum Kapitalisieren
},
'/http:\/\/m66\.net/' => function($matches) {
return '<a href="' . $matches[0] . '">' . $matches[0] . '</a>'; // URLIn Link konvertieren
}
];
$result = preg_replace_callback_array($callbacks, $text);
echo $result;
?>
Passen Sie die E -Mail info@m66.net an und ersetzen Sie es durch Capital info@m66.net .
Passen Sie die URL http://m66.net an und ersetzen Sie es durch das HTML -Tag durch einen Hyperlink.
Nach dem Laufen ist die Ausgabe:
Wenden Sie sich an E -Mail:INFO@M66.NET,Besuchen Sie die offizielle Website:<a href="http://m66.net">http://m66.net</a>
Dieses einfachste Beispiel zeigt, wie preg_replace_callback_array verschiedene Rückrufe aufruft, um den Ersatz gemäß verschiedenen regulären Mustern abzuschließen.
Angenommen, wir haben einen Textstück, der den folgenden Ersatz abschließen muss:
Ersetzen Sie alle m66.NET -Mailboxen im Verschlüsselungsformat (Benutzername wird durch Sternchen ersetzt).
Konvertieren Sie alle übereinstimmenden HTTP- oder HTTPS -Links in Hyperlinks mit target = "_ leer" .
Konvertieren Sie alle Zahlen in englische Wörter (ersetzen Sie nur einige gemeinsame Zahlen).
Ersetzen Sie das Datumsformat (z. B. 2025-05-17 ) durch ein freundlicheres Format vom 17. Mai 2025 .
<?php
$text = "Post:user123@m66.net,Webseite:https://m66.net,Kontaktnummer:400,Veröffentlichungsdatum:2025-05-17。";
// Werkzeugfunktionen:Zahlen für englische Wörter
function numberToWords($num) {
$map = [
'0' => 'zero', '1' => 'one', '2' => 'two', '3' => 'three', '4' => 'four',
'5' => 'five', '6' => 'six', '7' => 'seven', '8' => 'eight', '9' => 'nine',
'400' => 'four hundred' // Als Beispiel
];
return $map[$num] ?? $num;
}
// Werkzeugfunktionen:Konvertierung des Datumsformates
function formatDate($date) {
$time = strtotime($date);
return date('d M Y', $time);
}
$callbacks = [
// Post加密,Benutzernamen werden durch Sternchen ersetzt
'/\b([\w.-]+)@m66\.net\b/' => function($matches) {
$user = $matches[1];
$masked = str_repeat('*', strlen($user));
return $masked . '@m66.net';
},
// Konvertieren http Und https Link
'/https?:\/\/m66\.net/' => function($matches) {
return '<a href="' . $matches[0] . '" target="_blank">' . $matches[0] . '</a>';
},
// Nummer für Englisch(Nur hier verarbeitet400)
'/\b400\b/' => function($matches) {
return numberToWords($matches[0]);
},
// Konvertierung des Datumsformates YYYY-MM-DD => DD Mon YYYY
'/\b(\d{4}-\d{2}-\d{2})\b/' => function($matches) {
return formatDate($matches[1]);
}
];
$result = preg_replace_callback_array($callbacks, $text);
echo $result;
?>
Um der E -Mail -Adresse anzupassen, ersetzen Sie alle Benutzernamen -Teile durch Sternchen, wie z. B. user123@m66.net an *******@m66.net .
Ersetzen Sie https://m66.net durch einen Hyperlink durch target = "_ leer", um die Benutzererfahrung zu erhöhen.
Ersetzen Sie die Nummer 400 durch das englische Wort vierhundert .
Konvertieren Sie Datum 2025-05-17 bis 17. Mai 2025 , lesbarer.
Auslaufergebnisse:
Post:*******@m66.net,Webseite:<a href="https://m66.net" target="_blank">https://m66.net</a>,Kontaktnummer:four hundred,Veröffentlichungsdatum:17 May 2025。
In diesen beiden Beispielen können wir sehen:
preg_replace_callback_array unterstützt mehrere reguläre Muster, die gleichzeitig übereinstimmen.
Jedes Muster kann an eine unabhängige Rückruffunktion gebunden werden, so dass die Ersatzlogik klar getrennt ist.
Es ist effizienter und bequemer als ein einzelner preg_replace_callback , wenn es sich um verschiedene Text handelt.
Die Ersatzlogik kann flexibel erweitert werden, einschließlich Charaktertransformation, formatierter Ausgabe, HTML -Tag -Injektion usw.
Der beste Weg, um preg_replace_callback_array zu lernen, besteht darin, zu versuchen, eine Vielzahl von Rückrufen zu schreiben, reguläre Ausdrücke zu kombinieren und seine Leistung und Flexibilität schrittweise zu beherrschen.