繁体   English   中英

PHP Regex检测单词中的重复字符

[英]PHP Regex detect repeated character in a word

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

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

如果不需要字母连续,则可以使用以下模式:

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

否则,这个就足够了:

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

试试这个正则表达式

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

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

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

表示接受三个或三个以上重复的单词字符的正则表达式的规范方法是

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

并且运算符{3,}没有关联性{3,}无法按照您在问题中显示的进行分组。

对于pedantic,纯正则表达式应为:

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

再次,这一次,您可以使用以下事实:一旦找到三个AAAAA*被匹配,因此它对正则表达式也有效:

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

但是第一个版本允许您捕获\\1组,该组界定了实际的匹配顺序。

这种方法的编写时间更长,但在解析数据字符串时效率更高,因为它完全没有回溯,并且每个字符只能访问一次。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM