如何使用正则表达式批量替换重复的 *- 模式为固定字符串
技术百科
聖光之護
发布时间:2026-01-01
浏览: 次 本文详解如何用 php 的 `preg_replace()` 高效替换数组中所有形如 `*-*-*-*` 的不定长重复模式为 `***`,重点解析正则逻辑、常见误区及一行式批量处理技巧。
在实际开发中,我们常需清理或标准化含规律性符号组合的文本(如 *-*-*-*、+-+--+ 等)。本例中,目标是将任意长度(≥3组)的 *-*-*...* 模式统一替换为 ***,且需对整个字符串数组批量处理。
关键在于准确描述模式结构:它并非“多个 * 或 - 的混合”,而是严格交替的 * 后跟 -,并以 * 结尾——即 *-*-*-* 可拆解为 (*-) 重复若干次,再加
一个末尾 *。因此正则应写作:
$result = preg_replace('/(\*-){3,}\*/', '***', $rows);✅ 正确解析:
- (\*-):捕获组,匹配字面量 * 后紧跟 -(注意 * 在字符类外需转义为 \*);
- {3,}:要求该组至少连续出现 3 次(对应最小模式 *-*-*);
- \*:匹配结尾的单独 *(例如 *-*-* → 2 组 (\*-) + 1 个 \*;*-*-*-* → 3 组 (\*-) + 1 个 \*)。
❌ 常见错误剖析:
- [\*\-]{3,} 匹配的是「任意 3 个及以上 * 或 - 字符」,如 **-、---、*- 都会命中,完全偏离目标;
- 忽略 * 的转义(如写成 *-)会导致正则语法错误(* 是量词,需 \* 表示字面量);
- 对数组逐元素 foreach 处理虽可行,但低效;preg_replace() 原生支持数组输入,直接返回新数组,更简洁安全。
完整可运行示例:
$rows = [
'Blah *-*-*-*-*-*-*-* Blah',
'Blah *-*-*-*-*-*-*-*-* Blah',
'Blah *-*-*-*-*-*-*-*-*-*-*-*-* Blah',
];
$result = preg_replace('/(\*-){3,}\*/', '***', $rows);
print_r($result);
// 输出:
// Array (
// [0] => Blah *** Blah
// [1] => Blah *** Blah
// [2] => Blah *** Blah
// )⚠️ 注意事项:
- 若原始字符串中存在其他 * 或 - 组合(如 *-x-*),该正则不会误匹配,因其严格要求 *- 连续出现 + 末尾 *;
- 如需匹配「至少 2 组」(即最短 *-*-),将 {3,} 改为 {2,} 即可;
- 替换操作不修改原数组 $rows,始终返回新数组,符合函数式编程习惯。
总结:掌握「结构化重复模式」的正则写法((...){n,} + 边界字符)比泛化字符类更精准;善用 preg_replace() 的数组能力,可大幅提升代码简洁性与可维护性。
# 的是
# 多个
# 如何用
# 如需
# 关键在于
# 因其
# 字符串
# foreach
# php
# 并以
# 正则表达式
# 定长
# 再加
# 最短
# 字符串数组
相关栏目:
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
AI推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
SEO优化<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
技术百科<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
谷歌推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
百度推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
网络营销<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
案例网站<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
精选文章<?muma echo $count; ?>
】
相关推荐
- 手机php文件怎么变成mp4_安卓苹果打开php转
- php中$this和::能混用吗_对象与静态作用域
- Mac的Time Machine怎么用_Mac系统
- Python函数接口稳定性_版本演进解析【指导】
- Windows10任务栏图标变成白色文件_Win1
- Linux如何使用Curl发送请求_Linux下A
- c++ namespace命名空间用法_c++避免
- 如何在Golang中使用replace替换模块_指
- 如何在 ACF 中正确更新嵌套多层 Group 字
- Windows蓝屏错误0x00000018怎么处理
- c# Task.Yield 的作用是什么 它和Ta
- Windows怎样关闭Edge新标签页广告_Win
- c++中如何对数组进行排序_c++数组排序算法汇总
- Golang如何遍历目录文件_Golang fil
- Python网络异常模拟_测试说明【指导】
- Win11怎么更改管理员名字 Win11修改账户名
- Windows10怎样连接蓝牙设备_Windows
- 如何更改Windows资源管理器的默认启动位置?(
- c++中explicit(bool)的用法 c++
- Windows10怎样设置家长控制_Windows
- 本地php环境打开php文件直接下载_浏览器解析p
- 如何在Golang中处理通道发送接收错误_防止阻塞
- Python异步网络编程_aiohttp说明【指导
- C++友元类使用场景_C++类间协作设计方式讲解
- 如何使用Golang实现容器健康检查_监控和自动重
- php485支持哪些操作系统_php485跨系统支
- Win11怎么查看显卡温度 Win11任务管理器查
- Django 测试数据库表缺失与字段未创建问题的完
- 如何优化Golang程序CPU性能_Golang
- PhpStorm怎么调试PHP代码_PhpStor
- Win11怎么查看已连接wifi密码 Win11查
- php怎么下载安装后设置默认字符集_utf8配置步
- Win11时间怎么同步到原子钟 Win11高精度时
- Python项目回滚策略_发布安全说明【指导】
- 如何使用Golang实现路由分组管理_Golang
- 如何使用Golang反射创建map对象_动态生成键
- 如何在Golang中实现并发消息队列消费者_Gol
- Windows10如何更改鼠标图标_Win10鼠标
- C++ static_cast和dynamic_c
- Win10闹钟铃声怎么自定义 Win10闹钟自定义
- Win10如何卸载预装Edge扩展_Win10卸载
- php控制舵机角度怎么调_php发送pwm信号控制
- Win11如何卸载OneDrive_Win11卸载
- Win11怎么设置右键刷新选项_Windows11
- c++怎么处理多线程死锁_c++ lock_gua
- Win10如何优化内存使用_Win10内存优化技巧
- Python变量绑定机制_引用模型解析【教程】
- c# 服务器GC和工作站GC的区别和设置
- php删除数据怎么加限制_带where条件删除避免
- Win11开始菜单打不开_修复Windows 11

QQ客服