Dans PHP, preg_replace_callback_array () est une fonction très puissante qui nous permet de remplacer plusieurs expressions régulières dans un tableau et de spécifier une fonction de rappel pour chaque expression régulière. Bien que cette fonction soit puissante, il peut avoir du mal à comprendre les débutants en raison de son utilisation légèrement complexe. Aujourd'hui, nous allons montrer comment envelopper preg_replace_callback_array () dans une fonction d'outil plus compréhensible et pratique, simplifiant son utilisation.
La syntaxe de base de preg_replace_callback_array () est la suivante:
preg_replace_callback_array(array $patterns, array $replace, string $subject): string
$ motifs : un tableau associatif, la clé est un modèle d'expression régulière et la valeur est la fonction de rappel correspondante.
$ remplace : la chaîne cible qui doit être remplacée.
$ sujet : la chaîne cible à laquelle l'expression régulière sera appliquée.
Chaque rappel recevra un tableau de résultat correspondant, que vous pouvez effectuer un traitement plus complexe dans la fonction de rappel, puis renvoyer le contenu remplacé.
La méthode d'appel de preg_replace_callback_array () est plus compliquée, en particulier lorsque plusieurs expressions régulières doivent être traitées. En encapsulant cette fonction, nous pouvons réduire le code en double, améliorer la lisibilité et la maintenabilité du code et simplifier la méthode d'appel.
Nous pouvons encapsuler preg_replace_callback_array () dans une fonction d'outil pour simplifier son utilisation.
/**
* Gérer plusieurs opérations de remplacement d'expression régulière
*
* @param string $subject Chaîne cibler
* @param array $patterns Cartographie du mode de remplacement et de la fonction de rappel
* @return string Renvoie la chaîne remplacée
*/
function replaceWithCallbacks(string $subject, array $patterns): string {
return preg_replace_callback_array($patterns, $subject);
}
Le noyau de cette fonction consiste à envelopper preg_replace_callback_array () en une fonction simple qui accepte la chaîne cible $ sujet et un array $ motifs contenant des modèles d'expression réguliers et des fonctions de rappel. De cette façon, l'utilisateur doit passer uniquement dans une chaîne cible et une carte de rappel de modèle, sans traiter avec des paramètres complexes de correspondance d'expression régulière et de rappel.
Utilisons un exemple concret pour montrer comment utiliser cette fonction d'encapsulation. Supposons que nous ayons une chaîne cible contenant plusieurs dates (comme 2023-04-21 ), nous devons les convertir dans un autre format (comme le 21 avril 2023 ).
$patterns = [
'/(\d{4})-(\d{2})-(\d{2})/' => function($matches) {
return $matches[1] . 'Année' . $matches[2] . 'lune' . $matches[3] . 'jour';
}
];
$subject = "Aujourd'hui est 2023-04-21,Demain est 2023-04-22。";
$replaced = replaceWithCallbacks($subject, $patterns);
echo $replaced;
Sortir:
Aujourd'hui est 2023Année04lune21jour,Demain est 2023Année04lune22jour。
De cette façon, nous utilisons la fonction RemplacewithCallbacks () encapsulée pour simplifier facilement plusieurs opérations de remplacement régulières en un seul appel.
Parfois, nous voulons modifier automatiquement une URL spécifique pendant le processus de remplacement. Par exemple, remplacez tous les noms de domaine par m66.net . Nous pouvons étendre nos fonctions d'outil pour y parvenir:
/**
* Remplacement automatique URL Le nom de domaine dans m66.net
*
* @param string $subject Chaîne cibler
* @return string Renvoie la chaîne remplacée
*/
function replaceUrlsWithM66(string $subject): string {
$patterns = [
'/https?:\/\/([a-zA-Z0-9-]+)(\.[a-zA-Z0-9-]+)+/' => function($matches) {
return 'https://' . 'm66.net';
}
];
return replaceWithCallbacks($subject, $patterns);
}
Dans cet exemple, nous créons une nouvelle fonction RemplaceurlsWithM66 () qui remplace tous les domaines d'URL dans la chaîne cible avec m66.net . Comment l'utiliser est comme suit:
$subject = "Visitez notre site https://example.com ou https://test.com Obtenez plus d'informations。";
$replaced = replaceUrlsWithM66($subject);
echo $replaced;
Sortir: