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

如何使用正则表达式匹配替换含字母数字和下划线的ID字符串?

你的代码存在两处核心问题,修正后即可正常运行:

问题分析

  • 正则规则不符合要求:
    1. 你将+写在了字符组[]内部,会额外匹配加号字符,不符合仅匹配字母、数字、下划线的要求
    2. 没有强制要求匹配内容必须包含至少1个下划线,导致所有纯字母、纯数字的内容也被命中,这是你出现匹配范围过大的核心原因
    3. 没有添加单词边界限制,可能出现半截匹配的异常情况
  • 替换字符串的闭合标签错误:你写的<\b>是错误语法,正确的粗体闭合标签是</b>

修正后的代码

$description = preg_replace(
    "~\b(?=[[:alnum:]_]*_)[[:alnum:]_]+\b~",
    "<b>$0</b>",
    $description
);

规则说明

  • \b匹配单词边界,确保只匹配独立的完整字符串,不会误匹配其他内容中的字符片段
  • (?=[[:alnum:]_]*_)是正向零宽断言,要求匹配的内容中必须至少存在一个下划线
  • [[:alnum:]_]+匹配一个或多个仅由字母、数字、下划线组成的字符

如果偏好更简洁的写法,PHP中\w默认等价于[[:alnum:]_],可以简化为:

$description = preg_replace(
    "~\b(?=\w*_)\w+\b~",
    "<b>$0</b>",
    $description
);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 11:24:03