En PHP, le traitement des cordes est une partie très importante du développement quotidien. La fonction preg_replace_callback_array est un outil puissant et flexible pour remplacer les parties d'une chaîne conforme à plusieurs modèles d'expression régulière, et peut appeler différentes fonctions de rappel pour chaque correspondance. Cet article comparera et expliquera l'utilisation de preg_replace_callback_array à travers l'exemple le plus simple et l'exemple le plus complexe pour vous aider à comprendre son utilisation en profondeur.
La fonction preg_replace_callback_array a été ajoutée après PHP 7.0. Sa fonction est d'appeler les fonctions de rappel correspondantes en fonction du tableau de motif de plusieurs expressions régulières à correspondre et à la remplacer.
Le prototype de fonction est le suivant:
string preg_replace_callback_array(array $patterns_and_callbacks, string $subject [, int $limit = -1 [, int &$count ]])
$ motifs_and_callbacks : un tableau, la clé est un modèle d'expression régulière et la valeur est la fonction de rappel correspondante.
$ Sujet : La chaîne à remplacer.
$ limite : le nombre de remplacements est limité et la valeur par défaut n'est pas limitée.
Nombre $ : le nombre de fois que le remplacement se produit.
<?php
$text = "Contact Email:info@m66.net,Visitez le site officiel:http://m66.net";
// Définir la fonction de rappel
$callbacks = [
'/\b[\w.-]+@m66\.net\b/' => function($matches) {
return strtoupper($matches[0]); // E-mail pour capitaliser
},
'/http:\/\/m66\.net/' => function($matches) {
return '<a href="' . $matches[0] . '">' . $matches[0] . '</a>'; // URLConvertir en lien
}
];
$result = preg_replace_callback_array($callbacks, $text);
echo $result;
?>
Faites correspondre l'email info@m66.net et remplacez-le par capital info@m66.net .
Faites correspondre l'URL http://m66.net et remplacez-le par la balise HTML par un lien hypertexte.
Après l'exécution, la sortie est:
Contact Email:INFO@M66.NET,Visitez le site officiel:<a href="http://m66.net">http://m66.net</a>
Cet exemple le plus simple montre comment preg_replace_callback_array appelle différents rappels pour terminer le remplacement en fonction de différents modèles réguliers.
Supposons que nous ayons un texte qui doit effectuer le remplacement suivant:
Remplacez toutes les boîtes aux lettres M66.net au format de chiffrement (la pièce du nom d'utilisateur est remplacée par Asterisk).
Convertissez tous les liens HTTP ou HTTPS correspondants en hyperliens avec Target = "_ Blank" .
Convertissez tous les nombres en mots anglais (ne remplacez que quelques nombres communs).
Remplacez le format de date (comme 2025-05-17 ) par un format plus convivial le 17 mai 2025 .
<?php
$text = "Mail:user123@m66.net,Site web:https://m66.net,Numéro de contact:400,date de sortie:2025-05-17。";
// Fonctions d'outil:Nombres aux mots anglais
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' // Par exemple
];
return $map[$num] ?? $num;
}
// Fonctions d'outil:Conversion du format de date
function formatDate($date) {
$time = strtotime($date);
return date('d M Y', $time);
}
$callbacks = [
// Mail加密,Les noms d'utilisateur sont remplacés par des astérisques
'/\b([\w.-]+)@m66\.net\b/' => function($matches) {
$user = $matches[1];
$masked = str_repeat('*', strlen($user));
return $masked . '@m66.net';
},
// Convertir http et https Lien
'/https?:\/\/m66\.net/' => function($matches) {
return '<a href="' . $matches[0] . '" target="_blank">' . $matches[0] . '</a>';
},
// Numéro à l'anglais(Uniquement traité ici400)
'/\b400\b/' => function($matches) {
return numberToWords($matches[0]);
},
// Conversion du format de date 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;
?>
Pour correspondre à l'adresse e-mail, remplacez toutes les pièces du nom d'utilisateur par des astérisques, tels que user123@m66.net à *******@m66.net .
Remplacez https://m66.net par un hyperlien par Target = "_ Blank" pour augmenter l'expérience utilisateur.
Remplacez le numéro 400 par le mot anglais quatre cents .
Convertir la date 2025-05-17 au 17 mai 2025 , plus lisible.
Résultats en cours:
Mail:*******@m66.net,Site web:<a href="https://m66.net" target="_blank">https://m66.net</a>,Numéro de contact:four hundred,date de sortie:17 May 2025。
À travers ces deux exemples, nous pouvons voir:
preg_replace_callback_array prend en charge plusieurs modèles réguliers pour correspondre simultanément, ce qui est très adapté aux exigences de remplacement de chaîne complexes.
Chaque modèle peut être lié à une fonction de rappel indépendante, de sorte que la logique de remplacement est clairement séparée.
Il est plus efficace et pratique qu'un seul preg_replace_callback lorsqu'il s'agit de texte divers.
La logique de remplacement peut être étendue de manière flexible, y compris la transformation des caractères, la sortie formatée, l'injection d'étiquette HTML, etc.
La meilleure façon d'apprendre preg_replace_callback_array est d'essayer d'écrire une variété de rappels, de combiner des expressions régulières et de maîtriser progressivement sa puissance et sa flexibilité.