【发布时间】:2010-09-23 14:33:13
【问题描述】:
我试图弄清楚如何编写一个正则表达式来检测我的字符串中是否有任何字符连续重复超过五次?例如,它不会检测到“hello”,但会检测到“hellooooooooooo”。
有什么想法吗?
编辑:抱歉,澄清一下,我需要它来检测重复五次以上的相同字符,而不是任何五个字符的序列。而且我还需要它与任何章程一起使用,而不仅仅是我的示例中的“o”。 ".{5,}" 不好,因为它只检测任意五个字符的任意序列,而不是同一个字符。
【问题讨论】:
我试图弄清楚如何编写一个正则表达式来检测我的字符串中是否有任何字符连续重复超过五次?例如,它不会检测到“hello”,但会检测到“hellooooooooooo”。
有什么想法吗?
编辑:抱歉,澄清一下,我需要它来检测重复五次以上的相同字符,而不是任何五个字符的序列。而且我还需要它与任何章程一起使用,而不仅仅是我的示例中的“o”。 ".{5,}" 不好,因为它只检测任意五个字符的任意序列,而不是同一个字符。
【问题讨论】:
应该这样做
(\w)\1{5,}
(\w) 匹配任意字符并放在第一组\1{5,} 检查第一组至少匹配 5 次。用法:
$input = 'helloooooooooo';
if (preg_match('/(\w)\1{5,}/', $input)) {
# Successful match
} else {
# Match attempt failed
}
【讨论】:
更正,应该是(.)\1{5,},我相信。我的错。这让你:
(.) #Any character
\1 #The character captured by (.)
{5,} #At least 5 more repetitions (total of at least 6)
您也可以使用(\w)\1{5,} 或([a-zA-Z])\1{5,} 将其限制为字母
【讨论】:
您可以使用正则表达式:
(.)\1{5,}
解释:
. : 匹配任何元字符
字符。() :用于分组和
记住匹配的单个字符。\1 : 反向引用单曲
上一页中记住的字符
步骤。{5,} : 5 或更多的量词在 PHP 中,您可以将其用作:
$input = 'helloooooooooo';
if(preg_match('/(.)\1{5,}/',$input,$matches)) {
echo "Found repeating char $matches[1] in $input";
}
输出:
Found repeating char o in helloooooooooo
【讨论】:
是的。
(.)\1+
这将匹配任何字符的重复序列。
\1 查看第一组括号的内容。 (因此,如果您有更复杂的正则表达式,则需要将其调整为正确的数字,以便选择正确的括号)。
如果需要指定,说三个以上:
(.)\1{3,}
\1 语法非常强大——例如,您还可以在正则表达式的其他地方使用它来搜索出现在搜索字符串不同位置的相同字符。
【讨论】: