如何调整PHP正则实现标点空格规范化并适配省略号等例外场景
正则适配省略号场景的调整方案
调整思路
新增两条规则即可覆盖省略号场景,不影响原有已适配的三类例外逻辑:
- 优先执行省略号统一规则:将所有前后带空白的三个连续点,直接转换为无前后空白的
... - 在原有单标点处理正则中新增连续点排除条件,避免省略号中的单个点被误匹配拆分
最终可运行代码
// 第一步:前置处理所有省略号,统一规整为无前后空格的... $variation['DESCRIPTION'] = preg_replace('#\s*\.{3}\s*#', '...', $variation['DESCRIPTION']); // 第二步:原有单标点处理规则,新增连续点排除逻辑,避免拆分省略号 $variation['DESCRIPTION'] = preg_replace('#\s*([:,.])(?!(?<=\d.)\d)(?!(?<=ό,)τι)(?!(?<=\.)\.|\.(?=\.))\s*#ui', '$1 ', $variation['DESCRIPTION']); // 第三步:收尾清理首尾空白和多余br标签 $variation['DESCRIPTION'] = preg_replace('#^\s*(<br />)*\s*|\s*(<br />)*\s*$#', '', $variation['DESCRIPTION']);
规则说明
新增的(?!(?<=\.)\.|\.(?=\.))条件作用为:跳过所有属于连续点的单个.,不会对省略号中的点做单独处理,保证...始终为一个整体。
该方案完全保留了你原有适配逻辑,仅新增省略号相关处理,不会影响已经兼容的十进制数字、千位分隔符数字、希腊语固定短语场景。
内容的提问来源于stack exchange,提问作者Faye D.
相关产品推荐
相关产品推荐

