【问题标题】:Regex for detecting the same character more than five times?用于检测相同字符五次以上的正则表达式?
【发布时间】:2010-09-23 14:33:13
【问题描述】:

我试图弄清楚如何编写一个正则表达式来检测我的字符串中是否有任何字符连续重复超过五次?例如,它不会检测到“hello”,但会检测到“hellooooooooooo”。

有什么想法吗?

编辑:抱歉,澄清一下,我需要它来检测重复五次以上的相同字符,而不是任何五个字符的序列。而且我还需要它与任何章程一起使用,而不仅仅是我的示例中的“o”。 ".{5,}" 不好,因为它只检测任意五个字符的任意序列,而不是同一个字符。

【问题讨论】:

标签: php regex


【解决方案1】:

应该这样做

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

用法:

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

【讨论】:

    【解决方案2】:

    更正,应该是(.)\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,} 将其限制为字母

    【讨论】:

    • 这也将匹配 "hello"、"goodbye" 或任何其他长度超过四个字符的字符串。
    • @LukeH:肯定是有间隔的。谢谢。
    • 这会起作用,但请注意“.”匹配除换行符之外的每个字符。这包括空白、数字等
    • @Powertieke:是的,我不确定 OP 中的“字符”到底是什么意思,所以我只提供了几个选项。
    【解决方案3】:

    您可以使用正则表达式:

    (.)\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
    

    【讨论】:

      【解决方案4】:

      是的。

      (.)\1+
      

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

      \1 查看第一组括号的内容。 (因此,如果您有更复杂的正则表达式,则需要将其调整为正确的数字,以便选择正确的括号)。

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

      (.)\1{3,}
      

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-12-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多