正则表达式检测相同的字符超过五次?

时间:2010-09-23 14:33:14

标签: php regex

我正在试图找出如何编写一个正则表达式,可以检测是否在我的字符串中,任何字符连续重复超过五次?例如,它不会检测到“hello”,但会检测到“helloooooooooo”。

有什么想法吗?

修改:很抱歉,为了澄清,我需要它来检测重复超过五次的相同的字符,而不是任何五个字符的序列。而且我还需要它来处理任何章程,而不仅仅是像我的例子中的“o”。 “。{5,}”并不好,因为它只检测任意五个字符的任何序列,而不是相同的字符。

4 个答案:

答案 0 :(得分:24)

这应该这样做

(\w)\1{5,}
  • (\w)匹配任何字符并将其放入第一组
  • \1{5,}检查第一组至少匹配5次。

用法:

$input = 'helloooooooooo';
if (preg_match('/(\w)\1{5,}/', $input)) {
 # Successful match
} else {
 # Match attempt failed
}

答案 1 :(得分:11)

更正,我应该(.)\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,}

将其限制为字母

答案 2 :(得分:1)

是的。

(.)\1+

这将匹配任何字符的重复序列。

\1查看第一组括号的内容。 (所以如果你有更复杂的正则表达式,你需要将它调整到正确的数字,以便它选择正确的括号集。)

如果您需要指定,请说三个以上:

(.)\1{3,}

\ 1语法非常强大 - 例如,您也可以在正则表达式的其他位置使用它来搜索出现在搜索字符串中不同位置的相同字符。

答案 3 :(得分:0)

您可以使用正则表达式:

(.)\1{5,}

说明:

  • .:与任何匹配的元字符 炭。
  • ():用于分组和 记住匹配的单个字符。
  • \1:返回对单身的引用 在上一个被记住的char 步骤。
  • {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