通八洲科技

如何使用正则表达式提取字符串中首个字母数字分界点前的部分

日期:2026-01-02 00:00 / 作者:花韻仙語

本文介绍如何用 php 正则精准截取字符串中首次出现“数字后紧跟大写字母”位置之前的内容,适用于如 'ab001j1' → 'ab001' 这类清洗需求。

在处理编码型字符串(如产品编号、序列号)时,常需剥离末尾的校验字符或状态标识——典型模式是:主体为字母+数字组合,末尾以「单个大写字母 + 单个数字」(如 J1、F2、B5)结尾。目标是保留主体部分,剔除该结尾标记

直接使用 str_replace() 配合错误的正则模式(如 /(?=.*\pL)(?=.*\p{Nd})/)无法达成目的,因为该模式是零宽断言,不匹配具体位置,且 str_replace() 不支持 PCRE 正则替换(应使用 preg_replace())。更高效、语义清晰的方案是 利用 preg_split() 基于边界切分

$word = 'AB001J1';
$output = preg_split("/(?<=[0-9])(?=[A-Z])/", $word, 2)[0];
echo $output; // 输出:AB001

原理说明

⚠️ 注意事项

该方法简洁、无副作用、无需捕获组,是处理此类结构化字符串裁剪的推荐实践。