Php 正则表达式捕获:重复两个字母
我试图检查一个单词是否有三个或更多重复的“两个字母pare”,但只有当相同的字母重复时,表达式才会返回true。为什么?Php 正则表达式捕获:重复两个字母,php,regex,Php,Regex,我试图检查一个单词是否有三个或更多重复的“两个字母pare”,但只有当相同的字母重复时,表达式才会返回true。为什么? (([a-z])([^\1]))\1\2{2,} ^ ^ ^ ^ ^ 1 2 3 4 5 1) 任何字母(捕获集\1) 2) 未设置为1的任何字符(捕获集\2) 3) 再次捕获\1 4) 再次捕获\2 5) 至少两次 应该返回真值的单词: 阿萨萨萨法斯夫、埃雷雷雷尔、DDDDD TRTRTRUUUUU 应返回FALS
(([a-z])([^\1]))\1\2{2,}
^ ^ ^ ^ ^
1 2 3 4 5
1) 任何字母(捕获集\1)2) 未设置为1的任何字符(捕获集\2)
3) 再次捕获\1
4) 再次捕获\2
5) 至少两次 应该返回真值的单词: 阿萨萨萨法斯夫、埃雷雷雷尔、DDDDD TRTRTRUUUUU 应返回FALSE的单词:
DDDDDD、RRRRRRRRLKAJF、FFFFFFF SSSSSS YTYTFFFFFF根据您的简短描述,以下正则表达式适用于您:
(([a-z])((?!\2)[a-z]))\1{2}
-匹配字母a到z,并将它们捕获到一个组中([a-z])
-返回对组2的引用\2
-匹配非组2的字母a到z(?!\2)[a-z])
2个反向引用#1的实例\1{2}
(([a-z])(?!\g{-1})[a-z])\1{2}
简而言之,此正则表达式匹配3个连续出现的不同字符的字母对。您可以使用以下方法解决此问题: 测试一下 说明:
([a-z])#匹配并捕获组1中的单个ASCII字母
(#匹配并捕获。。。
(?!\1)#除非它与之前捕获的字母相同
[a-z]#第2组中的单个ASCII字母
)#第2组结束
(?:\1\2)#匹配这两个字母
{2,}#两次或两次以上
backreference在字符类中不起作用(毕竟它们可能由多个符号组成)。请参阅“前瞻”选项。很少有示例可以帮助您澄清问题。@anubhava Asasasasas bhbhbhbhbh Blaytytyt…您真的需要给我们举个示例。有几种解释,有三个或更多重复的“两个字母对”
但也返回一个重复的字母,如:dddddddddddd谢谢!但是为什么是负前瞻\2而不是\1?首先开始的是数字1
。因此,外部的(…)
是数字1
,内部的([a-z])
是数字2
。非常感谢。此外,我还更新了答案,以显示相对后参考编号的使用。正如您在我的答案中的评论中指出的,这两个字母必须是不同的,+1用于实现该功能。:)
([a-z])((?!\1)[a-z])(?:\1\2){2,}