如何使用正则表达式批量替换重复的 *- 模式为固定字符串
技术百科
聖光之護
发布时间: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; ?>
】
相关推荐
- Win11怎么硬盘分区 Win11新建磁盘分区详细
- mac怎么退出id_MAC退出iCloud账号与A
- php本地部署后数据库连接报错_1045acces
- php打包exe怎么传递参数_命令行参数接收方法【
- Python网络日志追踪_请求定位解析【教程】
- MAC怎么解压RAR格式文件_MAC第三方解压工具
- 如何在Windows中创建新的用户账户?(标准与管
- 如何在Golang中编写异步函数测试_Golang
- Win10电脑怎么设置网络名称_Windows10
- php485函数执行慢怎么优化_php485性能提
- Win11如何隐藏桌面图标 Win11一键隐藏/显
- 如何使用Golang操作指针变量_Golang解引
- Windows执行文件被SmartScreen拦截
- php怎么连接数据库_MySQL数据库连接的基础代
- Win11资源管理器卡顿怎么办 Win11文件资源
- Win11怎么更改账户头像_Windows 11自
- Python函数参数高级用法_默认值与可变参数解析
- Windows10电脑怎么连接蓝牙设备_Win10
- Mac如何修改Hosts文件?(本地开发与屏蔽网站
- PythonPandas数据分析教程_数据清洗与处
- php485支持哪些操作系统_php485跨系统支
- 如何在Golang中写入XML文件_生成符合规范的
- windows系统找不到无线网络怎么办_windo
- Win11怎么开启HDR模式_Windows 11
- 如何在 VS Code 中正确配置并使用 NumP
- 如何在Golang中实现文件下载_Golang文件
- VSC怎么快速定位PHP错误行_错误追踪设置法【方
- php修改数据怎么改富文本_update更新htm
- Win11怎么更改电脑名称_Windows 11修
- c++中explicit(bool)的用法 c++
- Win11输入法选字框不见了怎么办_Win11输入
- Win11怎么设置触控板手势_Windows11三
- Win11怎么设置任务栏图标大小_Windows1
- MAC的“接续互通”功能无法使用怎么办_MAC检查
- Windows10怎样连接蓝牙设备_Windows
- 零基础学会Python自动化办公_高效处理Exce
- Python并发安全问题_资源竞争说明【指导】
- Win11怎么压缩文件 Win11自带压缩解压功能
- c++如何使用std::bitset进行位图算法_
- php中::能用于接口静态方法吗_接口静态方法调用
- Win11玩游戏全屏闪退怎么办_Win11全屏优化
- Win11怎么查看wifi信号强度_检测Windo
- Linux怎么修改用户密码_Linux系统pass
- php订单日志权限怎么设_php订单日志文件权限设
- Win11怎么关闭VBS安全性_Windows11
- c# F# 的 MailboxProcessor
- MySQL 中使用 IF 和 CASE 实现查询字
- Win10如何卸载预装Edge扩展_Win10卸载
- Win11怎么用设置清理回收站_Win11设置清理
- 如何使用Golang实现容器安全扫描_Golang

QQ客服