Php 正则表达式捕获:重复两个字母

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

我试图检查一个单词是否有三个或更多重复的“两个字母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

应返回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
  • \1{2}
    2个反向引用#1的实例
或使用相对后参考编号:

(([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,}