在程式碼展示、搜尋結果或關鍵字標記場景中,需將特定詞彙包裹 <span class="keyword"> 以套用樣式。核心挑戰在於:僅比對完整單字(避免部份比中)、忽略註解/字串內部、保留原始大小寫。本文提供一個以正則替換為基礎的實用方案。
<?php
function highlightKeywords(string $code, array $keywords, string $color = 'blue'): string {
// 1. 建立完整單字邊界正則:\b 為單字邊界,支援 Unicode 需 /u 修飾符
$patterns = [];
$replacements = [];
foreach ($keywords as $kw) {
// 僅匹配非 // 註解後的完整單字 (簡易版,完整語法分析建議用 tokenizer)
$pattern = '/\b' . preg_quote($kw, '/') . '\b/';
$patterns[] = $pattern;
$replacements[] = "<span style='color:{$color}'>$0</span>";
}
return preg_replace($patterns, $replacements, $code);
}
// 使用範例
$phpKeywords = ['if', 'else', 'foreach', 'function', 'return', 'class', 'public', 'private'];
$sourceCode = '<?php
function test($a) {
if ($a > 0) { return true; } else { return false; }
}
?>';
echo highlightKeywords($sourceCode, $phpKeywords, '#d63384');
?>
/\b(if|else|foreach)\b/ 並使用 preg_replace_callback。token_get_all() 解析 PHP Token 僅對 T_STRING、T_ECHO 等 Token 高亮,或引入成熟庫如 GeSHi、highlight.php。