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.
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);
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 $ )
<?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'abord PHP Étiquette
$code = preg_replace('/<\?php/', '<span style="color: purple;"><?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);
?>
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>
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é.
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).