【问题标题】:Regex to match repeated consonant正则表达式匹配重复的辅音
【发布时间】:2011-09-14 08:27:46
【问题描述】:

如果同一个辅音重复三次或更多次,我如何用正则表达式检测?

我的想法是匹配 tttoollikkkelikkkkke 之类的词

【问题讨论】:

    标签: regex validation


    【解决方案1】:

    我个人会反过来解决这个问题;我不使用[b-df-hj-np-tv-z],而是使用双重否定[^\W_aeiou]

    /([^\W_aeiou])\1\1+/i
    

    这有一个使用双重否定的字符类:匹配除非单词字符、下划线或元音之外的任何内容。忽略非 ASCII 元音,只有辅音可以匹配。保存匹配后,正则表达式会查找相同辅音的匹配(不区分大小写),然后再查找一个或多个,这将我们带到 3 个以上的连续辅音。

    【讨论】:

      【解决方案2】:

      试试这个:

      ([b-df-hj-np-tv-z])\1{2,}
      

      解释:

      • [b-df-hj-np-tv-z] 都是辅音
      • \1 是对第一组的反向引用(即 same 字符)
      • {2,} 表示“前项的2个或更多”,总共3个或更多

      live demo

      【讨论】:

      • [b-df-hj-np-tv-z]略短(并且可以说更具可读性)将是[^aeiou]
      • @phil294 更短,但甚至不一样:[^aeiou] 匹配 每个 字符而不是元音(即标点符号、特殊字符、全谱)。我的正则表达式只匹配不是元音的字母
      【解决方案3】:

      答案较高的正则表达式[b-df-hj-np-tv-z])\1{2,}有一个错误(“y”是fogotten)

      应该是[b-df-hj-np-tv-xz])\1{2,}

      【讨论】:

      • "Y" 没有被遗忘,在那种情况下它只是一个辅音。
      • 字母Y既可以看作元音也可以看作辅音。 proof from Oxford Dictionary
      • 不是反过来吗?我相信 v-z 是 vwxyz,而 v-xz 是 vwxz...除非我们认为 y 是元音...
      【解决方案4】:

      这是我能想到的最短的正则表达式:

      (?i)([b-z&&[^eiou]])\1\1+
      

      这使用正则表达式字符类减法排除元音。
      我不必提及“a”,因为我从“b”开始范围。
      使用(?i) 会使正则表达式不区分大小写。

      查看live demo

      【讨论】:

      • 有趣的答案,但是在不同的网站上尝试相同的模式来实时显示正则表达式的结果,给我不同的结果。 (我为单个辅音重新设计了您的正则表达式)→(?i)[b-z&[^aeiou]] 有些人认为&"&" 字符,其他人认为最后一个"]" 是必要的(因此单独考虑),可能是因为他们不认为"&&" 是级联。请告诉我更多信息以及我应该委托确保正则表达式总是正确解释(在我的程序中)? @波西米亚
      • @JackT 它完全取决于语言/os/shell/tool/editor 以及您使用的库/选项/标志。基本上......“这取决于”是所有可以说的。
      • 哇!超级快! :O ? 好吧,那么我将使用他们推荐的更简单的版本。但我更喜欢你的! ? 谢谢!编辑:对于那些会阅读的人,我尝试使用 2 &(?i)[b-z&&[^eiou]] 的模式
      • @jack 这个适用于 Java 和任何符合 PCRE 的工具
      • @jack 它可以工作,也可以不工作,但要找出我们编写单元测试。使用单元测试测试您的实现,您会立即确认它可以工作,并且每次构建时测试都会继续确认。
      【解决方案5】:

      您可以使用带有反向引用的捕获组。这将捕获重复的符号:

      /(
         ([\w])        ## second group is just one symbol
         \2            ## match symbol found in second groups
         \2+           ## match same symbol one or more times
      )/x              ## x is just to allow inner comments
      

      但并非所有正则表达式引擎都支持反向引用。

      【讨论】:

      • 这不只寻找辅音。您也可以匹配下划线和元音。
      【解决方案6】:

      某些正则表达式库中可能有快捷方式,但您始终可以...

      b{3,}|c{3,}|d{3,}...
      

      例如,某些库允许您使用可能更清洁的反向引用进行匹配...

      (bcd...)\1{2,}
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-03-24
        • 2015-07-27
        • 2014-01-11
        • 2012-10-31
        相关资源
        最近更新 更多