在字符串中查找出现次数超过3次但不是连续出现的任何字符的正则表达式

4

我已经找到了很多非常接近的答案,但还不太一样。

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

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

我正在逐步解决其他正则表达式问题,看看是否有人已经回答了它,但有很多问题,但还没有成功。


1
请提供3个匹配的字符串列表和3个不匹配的字符串列表。 - PP.
3个回答

6
这应该可以做到:
/(.)(.*\1){3}/

尝试将此与检查可允许字符组合在一起毫无意义。您应该首先测试所有字符是否为允许字符,然后再运行此测试。这就是为什么在此处使用“.”是可以的。

但是它会很慢。如果只迭代一次字符串并计算字符数,则速度会更快。虽然对于您的目的,我怀疑这没有太大区别,因为字符串非常短。


这两个都不能确保被搜索的字符不会连续重复出现... - Franz
2
@Franz:除非我理解错了问题,他并不关心它们是否连续。 - Mark Byers
1
嗯......再读一遍,我也是这么想的,但标题让我有些思考...... - Franz
Erik:你测试过了吗?它会工作的。这是一个“搜索”正则表达式。请注意,我没有使用^或$,因此它可以匹配字符串中的任何位置。 - Mark Byers
如果我指定一个字符呢?例如,我想让正则表达式匹配单词中的任何“c”? - GodFather
显示剩余2条评论

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

匹配一个“单词字符”,然后是两个“任意字符,再次是第一个字符”。因此,在第一个字符之间有任何内容的情况下,有三个第一个字符的副本。


使用[^\W\d_]来仅获取字母。 - Greg Bacon

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

这将匹配一个字符串,该字符串包含任意数量的字符,然后是特定的字符,之后再重复三次相同的字符(总共四次),中间可以有任意数量的字符(0..n)。这就是你想要的,对吧?

在例如 http://www.regexplanet.com/simple/index.html 上进行测试。

这个正则表达式可以匹配例如 "mississippi"(>3个s)和 "twinkle twinkle little star"(>3个t)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接