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

preg_match匹配含连字符hashtag问题:链接生成时连字符被截断

修复话题标签(Hashtag)连字符匹配截断问题

问题根源在正则匹配规则:当前代码里的\w元字符仅匹配字母、数字和下划线,不包含连字符,所以#something-else会被截断匹配成something,导致生成的链接参数缺失后半段。

解决方法

修改正则表达式,把匹配字符集从\w+替换为[\w-]+,这样就能同时匹配字母、数字、下划线和连字符:

function hashtag_links( $content ) {
    $content = ' '.$content;
    // 调整正则,新增连字符匹配规则
    preg_match_all( '/ #([\w-]+)/u', $content, $matches, PREG_SET_ORDER, 0);

    if ( isset( $matches[0] ) && is_array( $matches[0] ) ) {
        foreach ( $matches as $match ) {
            $link = '<strong onclick="window.location.assign(\'' . add_query_arg( 'hashtag', $match[1], um_get_core_page( 'activity' ) ) . '\'); return false;" class="um-link">#'.$match[1].'</strong>';
            $content = str_replace( '#' . $match[1], $link, $content );
        }
    }

    return $content;
}

扩展提示

如果需要支持更多特殊字符(比如点号),可以继续扩展字符集,例如改成[\w\-.]+。注意连字符要放在字符集的开头或结尾,避免被识别为范围符号。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 18:06:27