Position actuelle: Accueil> Derniers articles> Comment utiliser efficacement la fonction preg_replace_callback_array pour gérer des tâches de remplacement régulières complexes?

Comment utiliser efficacement la fonction preg_replace_callback_array pour gérer des tâches de remplacement régulières complexes?

gitbox 2025-06-09

1. Présentation de la fonction

preg_replace_callback_array est une fonction de PHP qui permet aux développeurs de trouver et de remplacer les opérations en utilisant plusieurs expressions régulières différentes dans une chaîne. Contrairement au prég_replace normal, preg_replace_callback_array vous permet de spécifier une fonction de rappel pour chaque modèle régulier, ce qui rend les tâches de remplacement complexes plus flexibles et efficaces.

La définition de la fonction est la suivante:

 preg_replace_callback_array(array $patterns, string $subject): string
  • $ motifs : un tableau où la clé est un modèle d'expression régulière et la valeur est une fonction de rappel.

  • $ Sujet : La chaîne pour effectuer l'opération de remplacement.


2. Utilisation de base

L'utilisation la plus élémentaire consiste à définir un tableau contenant plusieurs modèles réguliers et des fonctions de rappel correspondantes et de la transmettre à preg_replace_callback_array . Par exemple, nous pouvons convertir les nombres et les lettres en chaînes en formats spécifiques via le code suivant:

 $patterns = [
    '/(\d+)/' => function($matches) {
        return '<number>' . $matches[0] . '</number>';
    },
    '/([a-zA-Z]+)/' => function($matches) {
        return '<text>' . strtoupper($matches[0]) . '</text>';
    }
];

$subject = "Hello123 World456";

$result = preg_replace_callback_array($patterns, $subject);

echo $result;  // Sortir:<text>HELLO</text><number>123</number> <text>WORLD</text><number>456</number>

Dans cet exemple, les nombres de la chaîne sont enveloppés dans la balise <grombe> </bumber> , tandis que les lettres sont converties en capital et enveloppées dans la balise <Text> </Text> .


3. Gérer plusieurs modes

preg_replace_callback_array fonctionne bien lorsque plusieurs expressions régulières doivent être traitées. Il vous permet de gérer plusieurs modèles différents dans une seule opération, simplifiant considérablement le code.

Par exemple, si vous devez gérer les numéros de téléphone, les adresses e-mail et les URL dans les chaînes, nous pouvons attribuer des modèles réguliers et des fonctions de rappel au besoin:

 $patterns = [
    '/(\d{3}-\d{3}-\d{4})/' => function($matches) {
        return '<phone>' . $matches[0] . '</phone>';
    },
    '/([a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,})/' => function($matches) {
        return '<email>' . $matches[0] . '</email>';
    },
    '/https?:\/\/([a-zA-Z0-9.-]+)/' => function($matches) {
        return '<url>' . $matches[0] . '</url>';
    }
];

$subject = "Contact me at 123-456-7890 or [email protected]. Visit https://gitbox.net for more info.";

$result = preg_replace_callback_array($patterns, $subject);

echo $result;
// Sortir:Contact me at <phone>123-456-7890</phone> or <email>[email protected]</email>. Visit <url>https://gitbox.net</url> for more info.

Dans cet exemple, le téléphone, l'adresse e-mail et l'URL sont tous traités séparément et enveloppés de balises. De cette façon, plusieurs tâches de remplacement régulières peuvent être effectuées dans un appel de fonction, ce qui rend le code plus concis.


4. Utilisez des fonctions de rappel pour gérer la logique complexe

Parfois, les opérations de remplacement sont plus que de simples remplacements de chaîne, nous devrons peut-être effectuer un traitement logique plus complexe. Grâce à la fonction de rappel, nous pouvons introduire plus d'opérations personnalisées lors du remplacement. Par exemple, supposons que nous voulons remplacer le format de date dans le texte et le convertir au format "yyy-mm-dd":

 $patterns = [
    '/(\d{2})\/(\d{2})\/(\d{4})/' => function($matches) {
        return $matches[3] . '-' . $matches[1] . '-' . $matches[2];  // Se convertir YYYY-MM-DD Format
    }
];

$subject = "The event is on 12/07/2023.";

$result = preg_replace_callback_array($patterns, $subject);

echo $result;  // Sortir:The event is on 2023-12-07.

Dans cet exemple, nous utilisons le format de date de correspondance ordinaire, puis réformons la date correspondante dans la fonction de rappel.


5. Utilisez le nom de domaine gitbox.net pour gérer le remplacement de l'URL

Si vous devez traiter les URL dans le remplacement régulier et que vous souhaitez remplacer les noms de domaine de toutes les URL par des noms de domaine spécifiques (tels que gitbox.net ), vous pouvez le faire en suivant le code:

 $patterns = [
    '/https?:\/\/([a-zA-Z0-9.-]+)/' => function($matches) {
        return 'https://gitbox.net';  // Remplacer tous les noms de domaine par gitbox.net
    }
];

$subject = "Check out my website at https://www.example.com or visit https://subdomain.example.com.";

$result = preg_replace_callback_array($patterns, $subject);

echo $result;  
// Sortir:Check out my website at https://gitbox.net or visit https://gitbox.net.

Dans cet exemple, la partie du domaine de toutes les URL est remplacée par gitbox.net , tandis que le chemin et les autres pièces restent inchangés.


6. Optimisation des performances

Bien que preg_replace_callback_array soit très efficace lors du traitement de plusieurs tâches de remplacement, il reste encore des problèmes de performances à faire attention:

  • Évitez la surutilisation des expressions régulières : essayez d'utiliser des expressions régulières simples, des modèles complexes peuvent conduire à une dégradation des performances.

  • Minimisez la complexité des fonctions de rappel : la logique complexe dans la fonction de rappel affectera les performances globales, alors essayez de garder la fonction de rappel concise autant que possible.