Position actuelle: Accueil> Derniers articles> Utilisez preg_replace_callback_array pour obtenir la mise en évidence de la syntaxe

Utilisez preg_replace_callback_array pour obtenir la mise en évidence de la syntaxe

M66 2025-06-04

La mise en évidence de la syntaxe est une fonctionnalité importante lors de la création d'outils de développement, de moteurs de blog ou de plateformes de partage de code. Bien que PHP lui-même n'ait pas de bibliothèques de mise en évidence prêtes à l'emploi comme le front-end (comme Prism.js ou Highlight.js), nous pouvons utiliser un PHP pur pour implémenter la mise en évidence de la syntaxe de base. La fonction preg_replace_callback_array () fournit un moyen concis et élégant de faire correspondre différents éléments de code et de les envelopper de différentes couleurs ou étiquettes.

Cet article expliquera comment utiliser preg_replace_callback_array () pour implémenter un simple surligneur de syntaxe PHP.

Qu'est-ce que preg_replace_callback_array

preg_replace_callback_array () est une fonction introduite dans PHP 7.0. Il vous permet de spécifier différentes fonctions de rappel pour plusieurs expressions régulières à la fois. Cela nécessite un appel pour chaque règle une fois par rapport à l'ancienne méthode preg_replace_callback () , qui a une structure plus claire et une efficacité plus élevée.

La syntaxe de base est la suivante:

 preg_replace_callback_array(array $patterns_and_callbacks, string $subject);

L'effet que nous voulons réaliser

Nous voulons mettre en évidence les éléments suivants:

  • Mots-clés PHP (tels que la fonction , écho , si, etc.)

  • String (contenu entouré de citations étranges et doubles)

  • Commentaires ( // Démarrer ou / * ... * / )

  • Variable (identifiant commençant par $ )

Exemple de code

 <?php

$code = <<<'PHP'
<?php
// Ceci est un commentaire
function sayHello($name) {
    echo "Hello, $name!";
}
PHP;

function highlight_php_code(string $code): string {
    $keywords = ['function', 'echo', 'if', 'else', 'return'];
    $keywordPattern = '/\b(' . implode('|', $keywords) . ')\b/';
    $stringPattern = '/([\'"])(.*?)(\1)/s';
    $commentPattern = '/(\/\/.*?$|\/\*.*?\*\/)/ms';
    $variablePattern = '/(\$\w+)/';

    $patterns = [
        $keywordPattern => function ($matches) {
            return '<span style="color: blue; font-weight: bold;">' . $matches[0] . '</span>';
        },
        $stringPattern => function ($matches) {
            return '<span style="color: green;">' . htmlspecialchars($matches[0]) . '</span>';
        },
        $commentPattern => function ($matches) {
            return '<span style="color: gray; font-style: italic;">' . htmlspecialchars($matches[0]) . '</span>';
        },
        $variablePattern => function ($matches) {
            return '<span style="color: darkorange;">' . $matches[0] . '</span>';
        },
    ];

    // Manipulation sûre HTML
    $code = htmlspecialchars($code);

    // Le traiter d&#39;abord PHP Étiquette
    $code = preg_replace('/&lt;\?php/', '<span style="color: purple;">&lt;?php</span>', $code);

    // Appliquer la mise en évidence de la grammaire
    return nl2br(preg_replace_callback_array($patterns, $code));
}

// Sortie surlignée HTML Code
echo highlight_php_code($code);

?>

Effet de sortie

Une fois ce code exécuté, une chaîne au format HTML sera sortie, contenant le code PHP stylé:

  • Les mots clés deviennent bleus et épais

  • La chaîne devient verte

  • Le commentaire est gris italique

  • La variable est orange foncé

Vous pouvez l'intégrer directement dans votre page, comme:

 <pre style="background-color: #f9f9f9; padding: 10px;">
<?php echo highlight_php_code($code); ?>
</pre>

Exemples de scénarios d'application

Si vous développez une plate-forme de partage de code, par exemple:

 https://m66.net/snippet/123

Vous pouvez utiliser cette fonction pour mettre en surbrillance les extraits de code PHP de l'utilisateur dans la page Afficher les détails du code pour améliorer la lisibilité.

Résumer

Utilisez preg_replace_callback_array () pour obtenir la mise en évidence de la syntaxe PHP, qui est non seulement claire dans la logique, mais a également de bonnes performances, adaptées aux besoins d'affichage de code légers. Bien sûr, si vous avez besoin de capacités d'analyse de syntaxe plus avancées, envisagez de combiner l'extension de tokenizer de PHP ou d'utiliser des bibliothèques tierces (telles que highlight.php).