Dans PHP, la fonction preg_replace_callback_array est un outil puissant qui vous permet de spécifier différentes fonctions de rappel pour plusieurs modèles d'expression réguliers. Cette fonction associe le motif à la fonction de rappel via un tableau associatif et le remplace en séquence. Cependant, comment l'ordre d'exécution de la fonction de rappel est-il déterminé?
La fonction preg_replace_callback_array accepte deux paramètres: le premier paramètre est un tableau associatif, la clé du tableau est le modèle d'expression régulière et la valeur est la fonction de rappel. Le deuxième paramètre est la chaîne d'entrée. Les fonctions seront apparentes par motif par motif et remplacement des chaînes d'entrée dans l'ordre du motif défini dans le tableau.
<?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; // Sortir:Hi Earth! Hi Earth!
?>
Dans cet exemple, la chaîne d'entrée "Hello World! Hello World!" sera assorti d'abord à Hello , puis remplacé par HI ; Ensuite, il sera égalé au monde et remplacé par la Terre . L'ordre d'exécution de la fonction de rappel est déterminé en fonction de l'ordre de la définition de modèle dans le tableau.
L'ordre d'exécution de la fonction de rappel dans preg_replace_callback_array est strictement déterminé par les facteurs suivants:
L'ordre des modèles dans les tableaux : l'ordre d'exécution des fonctions de rappel est déterminé par l'ordre des clés (c'est-à-dire les modèles d'expression régulière) du tableau de motifs passés. PHP commencera par le premier modèle du tableau et exécutera la fonction de rappel un par un dans l'ordre.
Priorité correspondante de correspondance : Si plusieurs modèles d'expression régulière peuvent correspondre à la même position (par exemple, deux modèles correspondent à la même pièce dans une chaîne), PHP sélectionnera le premier motif de correspondance en fonction de l'ordre du tableau de motif pour exécuter la fonction de rappel. Par conséquent, l'ordre des modèles est crucial.
Impact de la correspondance globale : si un modèle correspond à une partie de la chaîne et est remplacé, le contenu de la nouvelle chaîne peut affecter la correspondance des modèles suivants. Par conséquent, le contenu de chaîne remplacé affectera l'exécution des fonctions de rappel suivantes.
<?php
$patterns = [
'/o/' => function ($matches) {
return "O";
},
'/world/' => function ($matches) {
return "Universe";
}
];
$string = "hello world!";
$result = preg_replace_callback_array($patterns, $string);
echo $result; // Sortir:hellO Universe!
?>
Dans cet exemple, bien que le monde / le monde / motif correspond, puisque le motif / o / est d'abord assorti et remplacé par O dans la chaîne comme O , la sortie finale est Hello Universe! .
L'ordre dans lequel la fonction de rappel est exécutée devient particulièrement importante lorsque plusieurs modèles correspondent à la même position ou sous-chaîne. Si vous souhaitez vous assurer qu'une fonction de rappel particulière est en premier, vous devez mettre le modèle d'expression régulière pertinent devant le tableau.
Par exemple, supposons que vous ayez une chaîne contenant différents liens et balises HTML, et que vous souhaitez d'abord remplacer le lien, puis les balises HTML. À ce stade, le modèle de remplacement des liens doit être en avance sur le modèle de remplacement de balises HTML.
<?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; // Sortir:Visit <a href='https://m66.net'>Link</a> for more <strong><b>information</b></strong>!
?>
Dans cet exemple, / https ?: \ / \ / \ s + / mode remplacera d'abord le lien, et /<b>.*?<\/B>/ Le mode remplacera la balise <b> . Le résultat final est que le lien et la balise sont remplacés correctement.
La fonction preg_replace_callback_array vous permet de définir plusieurs modèles d'expression réguliers et leurs fonctions de rappel via un tableau associatif. L'ordre d'exécution de la fonction de rappel est déterminé par l'ordre des modèles dans le tableau de motifs. Lorsque plusieurs modèles correspondent à la même pièce, le modèle de correspondance préféré exécutera d'abord la fonction de rappel correspondante. Par conséquent, lorsque vous utilisez preg_replace_callback_array , assurez-vous que l'ordre des tableaux de motifs répond à vos besoins.