PHP正则表达式检测单词中的重复字符

时间:2017-03-27 22:27:22

标签: php regex

(preg_match('/(.)\1{3}/', $repeater))

我正在尝试创建一个正则表达式,它将检测一个在整个单词中重复三次或更多次字符的单词。我尝试了很多种方法,似乎无法获得正确的输出。

3 个答案:

答案 0 :(得分:2)

如果你不需要信件是连续的,你可以用这种模式来做:

\b\w*?(\w)\w*?\1\w*?\1\w*

否则这个应该足够了:

\b\w*?(\w)\1{2}\w*

答案 1 :(得分:0)

尝试使用此正则表达式

(preg_match('/(.)\1{2,}/', $repeater))

这应匹配3次或更多次,请参阅此处示例http://regexr.com/3fk80

答案 2 :(得分:0)

严格来说,包含\1\2,...事物的正则表达式不是数学正则表达式,而解析它们的扫描程序在它必须修改自身的意义上效率不高包括被接受的组,以便用于匹配发现的字符串,并且在失败的情况下,它必须回溯匹配组的长度。

表达接受重复三次或更多次单词字符的真正正则表达式的规范方法是

(A{3,}|B{3,}|C{3,}|...|Z{3,}|a{3,}|b{3,}|...|z{3,})

并且操作员{3,}没有相关性,无法按照问题中的说明对其进行分组。

对于迂腐的人来说,纯正则表达式应该是:

(AAAA*|BBBB*|CCCC*|...|ZZZZ*|aaaa*|bbbb*|cccc*|...|zzzz*)

再次,这一次,您可以使用AAAA*匹配的事实,一旦找到三个A,所以它也适用于正则表达式:

AAA|BBB|CCC|...|ZZZ|aaa|bbb|ccc|...|zzz

但第一个版本允许您捕获定义实际匹配序列的\1组。

这种方法写入时间会更长,但在解析数据字符串时效率要高得多,因为它根本没有回溯,只访问每个字符一次。