本文介绍一种基于正则断言的高效方法,利用`preg_split`配合前后查找(lookaround),在首个大写字母紧接数字的位置进行分割,从而提取前缀部分(如将"ab001j1"转为"ab001")。
在处理如产品编码、序列号等字符串时,常需剥离末尾的“单个大写字母+单个数字”组合(例如 AB001J1 → AB001,ZR010F2 → ZR010,ZQ10B5 → ZQ10)。注意:这不是简单的字符替换,而是定位字母与数字的边界并截断后续内容。
直接使用 str_replace 或 preg_replace 配合 /(?=...)/ 类型的正向先行断言是无效的——因为 str_replace 不支持正则,而 preg_replace 若用于删除,易误删中间数字或破坏结构。
✅ 推荐方案:使用 preg_split + 零宽断言(zero-width assertions)
$word = 'AB001J1';
$output = preg_split("/(?<=[0-9])(?=[A-Z])/", $word, 2)[0];
echo $output; // 输出:AB001? 原理详解:
✅ 其他常见变体适配:
/(?⚠️ 注意事项:
总结:与其尝试“删除末尾模式”,不如“在边界安全切分”。preg_split 结合原子级断言,简洁、高效、可读性强,是处理此类结构化字符串截取任务的最佳实践。