Dans PHP, preg_replace_callback_array est une fonction très puissante qui peut traiter plusieurs expressions régulières et exécuter des fonctions de rappel spécifiées lorsqu'elles sont appariées. En règle générale, cela nous oblige à spécifier une fonction de rappel pour chaque expression régulière, mais à mesure que la complexité logique augmente, cette approche peut entraîner la verbose des fonctions de rappel et pas faciles à entretenir. Pour simplifier ce processus, nous pouvons utiliser des groupes de capture nommés pour simplifier la logique de rappel de preg_replace_callback_array , ce qui rend le code plus clair et plus facile à entretenir.
Dans les expressions régulières, le groupe nommé est un identifiant nommé pour le résultat correspondant, qui vous permet d'accéder au contenu correspondant par nom, pas seulement par indexation numérique. La syntaxe pour nommer un groupe est la suivante:
(?<name>pattern)
où le nom est le nom que vous donnez pour ce regroupement, et le modèle est le modèle d'expression régulière réel.
Dans preg_replace_callback_array , nous passons généralement un tableau contenant plusieurs modèles et des fonctions de rappel correspondantes. Lorsque plusieurs expressions régulières doivent être traitées, il est souvent nécessaire d'écrire une fonction de rappel pour chaque expression, ce qui peut rendre le code verbeux. En utilisant le groupe nommé, nous pouvons obtenir des résultats correspondants plus intuitivement, réduisant ainsi la dépendance à la logique de rappel.
Voici un exemple spécifique:
Supposons que nous ayons un ensemble d'URL qui doivent remplacer certains des paramètres de requête via preg_replace_callback_array . Nous pouvons simplifier la logique des fonctions de rappel en utilisant le groupe nommé.
<?php
// Définissez un tableau contenant des expressions et des fonctions de rappel régulières
$patterns = [
'/(?<scheme>https?):\/\/(?<host>[a-zA-Z0-9.-]+)\/(?<path>[^?]+)\?(?<query>.*)/' => function ($matches) {
// Accédez aux résultats de correspondance par groupement nommé
$scheme = $matches['scheme'];
$host = $matches['host'];
$path = $matches['path'];
$query = $matches['query'];
// Ici, vous pouvez traiter les paramètres de requête
$query = str_replace('example.com', 'm66.net', $query);
// Renvoie la chaîne remplacée
return $scheme . '://' . $host . '/' . $path . '?' . $query;
}
];
// Quoi gérer URL Liste
$urls = [
'https://example.com/path/to/resource?param1=value1¶m2=value2',
'http://example.com/another/path?param1=value1',
];
// utiliser preg_replace_callback_array Faire un remplacement
$updatedUrls = preg_replace_callback_array($patterns, $urls);
// Sortir le résultat après le remplacement
foreach ($updatedUrls as $url) {
echo $url . PHP_EOL;
}
?>
Partie d'expression régulière:
(? <Schet> https?) : Faites correspondre http ou https et schéma informatique .
(? <host> [a-za-z0-9 .-] +) : Faites correspondre le nom de domaine et le nom hôte .
(? <Tath> [^?] +) : Faites correspondre la partie de chemin et le nommer le chemin .
(? <Werry>. *) : Faites correspondre la partie du paramètre de requête et nommez- le requête .
Partie de la fonction de rappel: Dans la fonction de rappel, nous obtenons les parties de la correspondance d'expression régulière en dénovant le regroupement de matchs (tels que $ correspondant ['schéma'] ), ce qui simplifie le processus d'accès. Nous avons également traité la partie de la chaîne de requête et remplacé le nom de domaine Exemple.com par m66.net .
preg_replace_callback_array : cette fonction accepte un tableau d'expressions et de fonctions de rappel régulières, correspond à l'URL un par un et exécute les fonctions de rappel correspondantes.