如何使用正则表达式匹配包含重复字母的字符串
技术百科
霞舞
发布时间:2026-01-22
浏览: 次 本文介绍如何在 php 中使用 `preg_grep()` 和 unicode 感知正则表达式,精准筛选出**至少包含两个相同字母(任意字母)且非连续也允许间隔**的字符串,适用于去重检测、密码强度校验等场景。
要实现“匹配任意字母出现两次及以上(不强制相邻)”的需求,关键在于:不能硬编码具体字符(如 /a{2}/),而应使用捕获组 + 反向引用,并确保匹配的是真正的“字母”,而非任意字符(避免误匹配空格、数字或标点)。
推荐正则表达式:
'/(\p{L}).*\1/'- (\p{L}):匹配任意 Unicode 字母(如 a, B, é, 中),并捕获到第 1 组;
- .*:匹配任意数量(含
零个)的非换行符字符(贪婪匹配);
- \1:反向引用第 1 组捕获的完全相同的字母,确保二次出现的是同一个字符。
✅ 正确示例(匹配成功):
- "asds" → s 在位置 1 和 3 出现 → ✅
- "dfaa" → a 在位置 2 和 3 出现(连续)→ ✅
- "aabb" → a 出现两次(前两位)→ ✅
- "aaabb" → a 出现三次 → ✅
⚠️ 注意事项:
- 原代码中 explode("\n", $input_lines) 是错误的:$input_lines 已是数组,无需 explode;直接对数组使用 preg_grep() 即可。
- 若需仅匹配 ASCII 字母(排除中文、带音调字母等),可改用 /([a-zA-Z]).*\1/;
- 若要求“至少两个相同字母且必须连续”,应使用 /([a-zA-Z])\1+/;
- \p{L} 在 PCRE 中默认启用 UTF-8 模式,PHP 7.3+ 默认支持;若环境较旧,建议添加 u 修饰符:'/(\p{L}).*\1/u'。
完整可运行代码:
? 小结:该方案兼顾准确性与可扩展性——它不依赖预设字符集,天然支持多语言文本,并通过反向引用确保语义一致性。如需进一步限制最小重复次数(如“同一字母至少出现 3 次”),可结合 preg_match_all 或使用更复杂的回溯控制,但对绝大多数重复检测场景,/(\p{L}).*\1/ 已足够高效可靠。
# 的是
# 它不
# 多语言
# 适用于
# 而非
# 如需
# 已是
# 两次
# 编码
# 字符串
# 两位
# ASCII
# 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; ?>
】
相关推荐
- 如何使用Golang recover捕获panic
- Win11怎么设置屏保时间_调整Win11屏幕保护
- 如何优化Golang程序CPU性能_Golang
- Go 中实现 Python urllib.quot
- Flask 表单数据通过 SMTP 发送邮件的完整
- 如何使用Golang构建简易投票统计功能_Gola
- Win11怎么关闭专注助手 Win11关闭免打扰模
- Win11怎么退出微软账户_切换Win11为本地账
- mac怎么右键_MAC鼠标右键设置与触控板手势技巧
- 如何使用Golang包导出规则_控制函数和变量可见
- Mac的访达(Finder)怎么用_Mac文件管理
- Windows笔记本无法进入睡眠模式怎么办?(电源
- c++20的std::format怎么用 比pri
- 如何使用正则表达式提取以编号开头、后跟多个注解的完
- Win11相机打不开提示错误怎么修_相机权限开启与
- Win10系统怎么查看网络连接状态_Windows
- 如何使用Golang reflect检查方法数量_
- 如何在 IIS 上为 ASP.NET 6 应用排除
- Win11怎么设置虚拟内存_Windows 11优
- Win11怎么关闭系统声音_Win11系统提示音静
- 微信企业付款回调PHP怎么接收_处理企业付款异步通
- Python邮件系统自动化教程_批量发送解析与模板
- Python与Docker容器化部署实战_镜像构建
- ACF 教程:正确更新嵌套在多层 Group 字段
- Drupal 中渲染节点时出现 HTML 标签嵌套
- c++中如何求一个数的平方根_c++ sqrt函数
- Python变量绑定机制_引用模型解析【教程】
- php8.4如何调用com组件_php8.4win
- 如何用正则与预处理结合精准拦截拼接式垃圾域名
- Win10怎样清理C盘Steam游戏缓存_Win1
- LINUX下如何配置VLAN虚拟局域网_在LINU
- Windows蓝屏错误0x0000001E怎么修复
- 用lighttpd能运行php吗_lighttpd
- Win11怎么设置声音输出设备_Windows11
- Win11如何开启telnet服务 Win11启用
- Python多线程使用规范_线程安全解析【教程】
- Win10电脑C盘红了怎么清理_Windows10
- php报错怎么查看_定位PHP致命错误与警告的方法
- php与c语言在嵌入式中有何区别_对比两者在硬件控
- Win11怎么忘记WiFi网络_Win11删除已保
- 如何在 Laravel 中通过嵌套关联关系进行 o
- 如何在Golang中使用replace替换模块_指
- Win11怎么设置默认浏览器Chrome_Wind
- php怎么下载安装后测试是否成功_简单脚本验证方法
- 如何使用Golang实现基本类型比较_Golang
- Win11怎么硬盘分区 Win11新建磁盘分区详细
- Win11怎么关闭定位服务_保护Win11位置隐私
- 为什么本地php环境运行php脚本卡顿_php执行
- 如何使用Golang log设置日志输出格式_Go
- 如何使用Golang encoding/json解


QQ客服