You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP中如何高亮含+结尾的指定单词且避免部分匹配?

PHP实现含特殊字符的单词精准高亮

直接上解决方案,核心是用正则断言替代\b单词边界,既处理带+这类非单词字符的单词,又避免部分匹配:

// 要高亮的关键词列表
$keywords = ['c+', 'javascript'];
// 转义正则特殊字符(比如+会被转成\+)
$escapedKeywords = array_map(function($word) {
    return preg_quote($word, '/');
}, $keywords);
// 构建正则:用断言替代\b,确保前后不是单词字符
$pattern = '/(?<!\w)(' . implode('|', $escapedKeywords) . ')(?!\w)/i';
// 待处理的原字符串
$input = 'test c+ and javascript etc but NOT javascripter';
// 执行替换
$output = preg_replace($pattern, '<em>$1</em>', $input);

// 输出结果:test <em>c+</em> and <em>javascript</em> etc but NOT javascripter
echo htmlspecialchars($output);

关键逻辑说明

  1. 转义特殊字符:用preg_quote把关键词里的正则元字符(比如+、*、.等)转义,避免破坏正则结构。
  2. 自定义边界断言:
    • (?<!\w):反向否定断言,确保匹配内容的前一个字符不是单词字符(或者在字符串开头)
    • (?!\w):正向否定断言,确保匹配内容的后一个字符不是单词字符(或者在字符串结尾)
      这种方式比\b更灵活,因为\b只认单词字符(\w)和非单词字符的分界,而断言可以精准控制前后字符的类型。
  3. 避免部分匹配:比如javascript后面如果跟了er(单词字符),(?!\w)会阻止匹配,所以不会误把javascripter里的javascript高亮。

内容的提问来源于stack exchange,提问作者adrianTNT

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 13:02:38