【发布时间】:2011-09-14 08:27:46
【问题描述】:
如果同一个辅音重复三次或更多次,我如何用正则表达式检测?
我的想法是匹配 tttool、likkke 或 likkkkke 之类的词
【问题讨论】:
标签: regex validation
如果同一个辅音重复三次或更多次,我如何用正则表达式检测?
我的想法是匹配 tttool、likkke 或 likkkkke 之类的词
【问题讨论】:
标签: regex validation
我个人会反过来解决这个问题;我不使用[b-df-hj-np-tv-z],而是使用双重否定[^\W_aeiou]。
/([^\W_aeiou])\1\1+/i
这有一个使用双重否定的字符类:匹配除非单词字符、下划线或元音之外的任何内容。忽略非 ASCII 元音,只有辅音可以匹配。保存匹配后,正则表达式会查找相同辅音的匹配(不区分大小写),然后再查找一个或多个,这将我们带到 3 个以上的连续辅音。
【讨论】:
试试这个:
([b-df-hj-np-tv-z])\1{2,}
解释:
[b-df-hj-np-tv-z] 都是辅音\1 是对第一组的反向引用(即 same 字符){2,} 表示“前项的2个或更多”,总共3个或更多【讨论】:
[b-df-hj-np-tv-z]略短(并且可以说更具可读性)将是[^aeiou]
[^aeiou] 匹配 每个 字符而不是元音(即标点符号、特殊字符、全谱)。我的正则表达式只匹配不是元音的字母。
答案较高的正则表达式[b-df-hj-np-tv-z])\1{2,}有一个错误(“y”是fogotten)
应该是[b-df-hj-np-tv-xz])\1{2,}
【讨论】:
这是我能想到的最短的正则表达式:
(?i)([b-z&&[^eiou]])\1\1+
这使用正则表达式字符类减法来排除元音。
我不必提及“a”,因为我从“b”开始范围。
使用(?i) 会使正则表达式不区分大小写。
查看live demo。
【讨论】:
(?i)[b-z&[^aeiou]] 有些人认为& 是"&" 字符,其他人认为最后一个"]" 是必要的(因此单独考虑),可能是因为他们不认为"&&" 是级联。请告诉我更多信息以及我应该委托谁确保正则表达式总是正确解释(在我的程序中)? @波西米亚
& → (?i)[b-z&&[^eiou]] 的模式
您可以使用带有反向引用的捕获组。这将捕获重复的符号:
/(
([\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
但并非所有正则表达式引擎都支持反向引用。
【讨论】:
某些正则表达式库中可能有快捷方式,但您始终可以...
b{3,}|c{3,}|d{3,}...
例如,某些库允许您使用可能更清洁的反向引用进行匹配...
(bcd...)\1{2,}
【讨论】: