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 语句  济南网站建设制作公司,室内设计网站一般都有哪些功能?