正则表达式在字符串中查找任何字符使用次数超过3次但不连续

时间:2009-12-03 22:38:04

标签: regex

我已经找到了各种非常接近的答案,但并不完全。

我需要查看一个字符串,找到任何使用次数超过3次的字符。基本上限制密码禁止“密西西比”,因为它有超过3秒的密码。我认为它只需要是字符,但应该是unicode。所以我想(> alpha :)使字符集匹配。

我发现(\w)\1+{4,}找到了连续的字符,比如ssss或missssippi,但如果它们不是连续的则不会。

通过其他正则表达式问题的工作方式,看看是否有人回答了问题,但是有很多,但没有快乐。

3 个答案:

答案 0 :(得分:4)

这应该这样做:

/(.)(.*\1){3}/

尝试将其与检查允许的字符结合起来没有任何意义。您应首先测试所有字符是否为允许的字符,然后再运行此测试。这就是使用'。'的原因。这里。

虽然会很慢。在字符串上迭代一次并计算字符会更快。虽然为了你的目的,我怀疑它有很大的不同,因为字符串太短了。

答案 1 :(得分:1)

(\w)(.*\1){2,}

匹配“单词字符”,然后匹配“任何东西,然后是第一件事”的2份副本。因此,第一件事就是3份,中间有任何东西。

答案 2 :(得分:1)

.*(\w).*\1.*\1.*\1.*

这将匹配一个字符串,该字符串具有任意数量的字符,然后是某个字符,并且相同的字符在此之后重复三次(总共四个),其间包含任意数量的字符(0..n)。这就是你想要的,对吧?

例如,测试它http://www.regexplanet.com/simple/index.html

此正则表达式匹配,例如“密西西比”(> 3 s'es)和“闪烁的小星星”(> 3 t's)