Position actuelle: Accueil> Derniers articles> Utilisez preg_replace_callback_array pour implémenter l'injection de données pilotée par les étiquettes

Utilisez preg_replace_callback_array pour implémenter l'injection de données pilotée par les étiquettes

M66 2025-06-02

Dans le développement de PHP, le remplacement des chaînes est une opération très courante. Lorsque nous devons remplacer un texte de différentes manières en fonction d'un ensemble de marqueurs différents, preg_replace_callback_array est particulièrement pratique.

Cet article vous montrera comment implémenter un mécanisme d'injection de données "piloté par marque" à l'aide de preg_replace_callback_array , vous permettant d'intégrer de manière flexible des données dans des chaînes de modèle.

Qu'est-ce que preg_replace_callback_array ?

preg_replace_callback_array est une fonction introduite dans PHP 7. Il vous permet de remplacer les chaînes via un ensemble d'expressions régulières et de fonctions de rappel correspondantes.

Sa signature est la suivante:

 preg_replace_callback_array(array $patterns_and_callbacks, string $subject, int $limit = -1, int &$count = null): string

Scénario d'application: injection de données basée sur les étiquettes

Imaginez une situation où nous avons un paragraphe de texte qui contient plusieurs types de tags différents, par exemple:

 Bienvenue à visiter[[url:/welcome]],L'heure actuelle est{{time}}。

Nous voulons remplacer [[url: / bienvenue]] par un hyperlien et {{time}} par l'heure actuelle.

Étape 1: Définissez les fonctions régulières et de rappel

Nous utilisons deux expressions régulières pour correspondre aux balises:

  • \ [\ [url: (. *?) \] \] est utilisé pour correspondre à la balise du type d'URL.

  • \ {\ {Time \} \} est utilisé pour faire correspondre les horodatages.

 $template = 'Bienvenue à visiter[[url:/welcome]],L'heure actuelle est{{time}}。';

$patterns = [
    '/\[\[url:(.*?)\]\]/' => function ($matches) {
        $path = $matches[1];
        return '<a href="https://m66.net' . htmlspecialchars($path) . '">Cliquez ici</a>';
    },
    '/\{\{time\}\}/' => function () {
        return date('Y-m-d H:i:s');
    },
];

$output = preg_replace_callback_array($patterns, $template);

echo $output;

Résultat de sortie:

 Bienvenue à visiter<a href="https://m66.net/welcome">Cliquez ici</a>,L&#39;heure actuelle est2025-04-21 14:30:00。

Remarque: le temps réel variera en fonction du moment où vous exécutez.

Pourquoi utiliser preg_replace_callback_array ?

Cette approche présente plusieurs avantages par rapport à la remplacement traditionnel de PREG_REPLACE_CALLACK ou de la chaîne:

  1. Structure claire : tous les modèles et la logique de remplacement sont concentrés dans un tableau, faciles à entretenir.

  2. Exécution plus efficace : tous les modes peuvent être traités immédiatement sans plusieurs scans de texte.

  3. Évolutivité forte : l'ajout d'une nouvelle balise nécessite seulement l'ajout d'un élément au tableau, et il n'est presque pas nécessaire de modifier un autre code.

Extension: prise en charge de plus de balises

Si nous voulons prendre en charge des balises plus dynamiques, telles que les noms d'utilisateurs, les nombres aléatoires, etc., continuez simplement à étendre le tableau des modèles $ :

 $patterns['/\{\{user\}\}/'] = function () {
    return 'Xiao Ming';
};

$patterns['/\{\{rand\}\}/'] = function () {
    return rand(1, 100);
};

Ensuite, utilisez-le dans le modèle comme ceci:

 Accueillir,{{user}}!Votre numéro chanceux est:{{rand}}。

Résumer

Un moteur d'injection de données basé sur des étiquettes peut être facilement implémenté à l'aide de preg_replace_callback_array . Il est non seulement sémantique, mais aussi très extensible, et est très adapté à une utilisation dans les systèmes de modèles, le traitement du contenu, l'échappement de texte riche et d'autres scénarios.

J'espère que cet article vous sera utile pour comprendre et utiliser cette fonction. Si vous développez un moteur de modèle léger ou un outil de rendu de contenu, considérez cette approche pour améliorer la qualité et la flexibilité de votre code.