PHP 正则表达式匹配包含重复字符(任意字母)的字符串
发布时间 - 2026-01-22 00:00:00 点击率:次本文介绍如何使用 php 的 `preg_grep()` 配合正则表达式,精准筛选出**至少包含两个相同字母(非连续亦可)**的字符串,例如 "asds"(s 出现两次)、"dfaa"(a 出现两次),而非仅匹配特定字符(如仅 'a')或要求连续重复。
要实现“匹配任意字母至少出现两次(位置不限)”的需求,关键在于捕获一个字母,再在后续内容中回溯匹配相同的字母。此时应使用带捕获组与反向引用的正则表达式:/(\p{L}).*\1/。
- (\p{L}):匹配并捕获任意 Unicode 字母(支持中文、西欧字符等,比 [a-zA-Z] 更健壮);
- .*:匹配任意数量(含零个)的非换行字符,确保两处相同字母之间可有其他字符;
- \1:反向引用第一个捕获组的内容,即要求后续再次出现
完全相同的那个字母。
✅ 正确示例代码如下:
$input_lines = ["asdf", "fdas", "asds", "d fm", "dfaa", "aaaa", "aabb", "aaabb"];
$result = preg_grep('/(\p{L}).*\1/', $input_lines);
print_r($result);输出结果为:
Array
(
[2] => asds // s 出现在第1位和第3位
[4] => dfaa // a 出现在第3位和第4位
[5] => aaaa // a 多次出现
[6] => aabb // a 出现在第0、1位;b 出现在第2、3位(任一字母满足即可)
[7] => aaabb // 同上,a 或 b 均满足条件
)⚠️ 注意事项:
- 原问题中 explode("\n", $input_lines) 是错误用法——$input_lines 已是数组,无需 explode;直接对数组使用 preg_grep() 即可。
- 若只需匹配 ASCII 字母(如明确限定英文),可用 /([a-zA-Z]).*\1/ 替代,但 (\p{L}) 更通用、国际化友好。
- 该模式不要求重复字符相邻(区别于 /(.)\1/),因此 "asds" 能被正确匹配(首尾 s)。
- 若需排除空格、标点等干扰,可结合 trim() 或预处理,但本正则本身已通过 .* 自动跳过中间任意字符。
? 总结:解决“任意字符重复出现”类问题,核心是「捕获 + 通配 + 反向引用」三步逻辑。避免硬编码具体字符(如 /a{2}/),改用 \p{L} 提升健壮性,并始终验证输入数据结构(如确认已是数组而非需 explode 的字符串)。
# php
# 正则表达式
# 编码
# 区别
# 字符串
# 数据结构
# ASCII
# 出现在
# 两次
# 已是
# 而非
# 西欧
# 第一个
# 只需
# 英文
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
Laravel怎么判断请求类型_Laravel Request isMethod用法
网页设计与网站制作内容,怎样注册网站?
阿里云高弹*务器配置方案|支持分布式架构与多节点部署
android nfc常用标签读取总结
Laravel如何实现RSS订阅源功能_Laravel动态生成网站XML格式订阅内容【教程】
Python文件操作最佳实践_稳定性说明【指导】
详解Nginx + Tomcat 反向代理 负载均衡 集群 部署指南
php做exe能调用系统命令吗_执行cmd指令实现方式【详解】
如何实现建站之星域名转发设置?
小米17系列还有一款新机?主打6.9英寸大直屏和旗舰级影像
javascript中的try catch异常捕获机制用法分析
北京企业网站设计制作公司,北京铁路集团官方网站?
韩国服务器如何优化跨境访问实现高效连接?
详解Oracle修改字段类型方法总结
详解Android——蓝牙技术 带你实现终端间数据传输
黑客入侵网站服务器的常见手法有哪些?
如何用5美元大硬盘VPS安全高效搭建个人网站?
🚀拖拽式CMS建站能否实现高效与个性化并存?
Laravel怎么定时执行任务_Laravel任务调度器Schedule配置与Cron设置【教程】
如何快速搭建高效香港服务器网站?
JavaScript实现Fly Bird小游戏
Win11怎样安装网易有道词典_Win11安装词典教程【步骤】
ChatGPT常用指令模板大全 新手快速上手的万能Prompt合集
Java类加载基本过程详细介绍
如何快速查询网址的建站时间与历史轨迹?
Laravel怎么实现软删除SoftDeletes_Laravel模型回收站功能与数据恢复【步骤】
PHP正则匹配日期和时间(时间戳转换)的实例代码
linux写shell需要注意的问题(必看)
Laravel Blade组件怎么用_Laravel可复用视图组件的创建与使用
Laravel如何发送系统通知_Laravel Notifications实现多渠道消息通知
Laravel事件监听器怎么写_Laravel Event和Listener使用教程
Laravel怎么返回JSON格式数据_Laravel API资源Response响应格式化【技巧】
微信小程序 scroll-view组件实现列表页实例代码
昵图网官方站入口 昵图网素材图库官网入口
Win11怎么恢复误删照片_Win11数据恢复工具使用【推荐】
如何在Windows服务器上快速搭建网站?
Linux安全能力提升路径_长期防护思维说明【指导】
Python图片处理进阶教程_Pillow滤镜与图像增强
Laravel怎么设置路由分组Prefix_Laravel多级路由嵌套与命名空间隔离【步骤】
Internet Explorer官网直接进入 IE浏览器在线体验版网址
Android滚轮选择时间控件使用详解
如何用wdcp快速搭建高效网站?
JavaScript模板引擎Template.js使用详解
常州企业网站制作公司,全国继续教育网怎么登录?
香港服务器租用费用高吗?如何避免常见误区?
如何在沈阳梯子盘古建站优化SEO排名与功能模块?
html5源代码发行怎么设置权限_访问权限控制方法与实践【指南】
Laravel如何配置和使用队列处理异步任务_Laravel队列驱动与任务分发实例
Swift中swift中的switch 语句
济南网站建设制作公司,室内设计网站一般都有哪些功能?


