本文介绍如何用 php 正则表达式精准截取字符串中首次出现“大写字母紧接数字”位置之前的内容,适用于如 `ab001j1` → `ab001` 这类清洗需求。
在处理编码、产品编号或序列号(如 'AB001J1'、'ZR010F2'、'ZQ10B5')时,常需剥离末尾的“单个大写字母 + 单个数字”后缀,保留主体部分(即 AB001、ZR010、ZQ10)。注意:这不是简单匹配“一个字母+一个数字”,而是识别字母数字结构的边界点——即数字后紧跟大写字母的位置,并在该位置进行切割。
推荐采用 preg_split() 配合零宽断言(lookaround) 实现高精度分割:
$word = 'AB001J1';
$output = preg_split("/(?<=[0-9])(?=[A-Z])/", $word, 2)[0];
echo $output; // 输出:AB001✅ 正则解析:
⚠️ 注意事项:
? 扩展建议:如需更健壮的清洗(例如兼容 X9Y8Z7 多组后缀),可用 preg_replace('/[A-Z]\d+$/','',$word) 直接移除结尾的「大
写字母+数字」组合(支持多位数字),但需根据实际业务规则权衡精确性与灵活性。