通八洲科技

如何使用正则表达式截取字符串中首个字母数字组合前的部分

日期:2026-01-02 00:00 / 作者:聖光之護

本文介绍一种基于正则断言的高效方法,通过 preg_split 在首个大写字母紧接数字的位置进行分割,提取目标前缀(如 "ab001j1" → "ab001"),避免误匹配与复杂替换逻辑。

在处理类似 AB001J1、ZR010F2 或 ZQ10B5 这类字符串时,目标是截取首个“单个大写字母 + 单个数字”组合出现之前的所有内容(即去掉末尾的 J1、F2、B5 等),得到 AB001、ZR010、ZQ10。

注意:原始代码中误用 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

? 表达式解析:

⚠️ 注意事项:

? 总结:该方案简洁、可读性强,利用正则的零宽断言精准定位结构边界,无需循环或多次替换,适用于批量清洗产品编码、序列号等场景。