正则表达式重复字符计数

时间:2011-08-03 16:09:38

标签: java regex character repeat

如果我有一组像“abcdefghij”这样的字符并使用这个字符,我会使用这个字符随机生成一个密码。生成的密码可以具有例如6个字符。如何使用正则表达式验证密码,以便相邻字符不相同,并且字符不会重复两次?

2 个答案:

答案 0 :(得分:3)

您可以使用以下内容:

/^
  (?:(.)
     (?!\1)           # neighbor characters are not identical
     (?!(?>.*?\1){2}) # character does not occur more than twice
  )*
\z/x

Perl引用,如果不支持,可以删除原子组。


在Java正则表达式中,它可以写成:

^(?:(.)(?!\1|(?:.*?\1){2}))*\z

答案 1 :(得分:-2)

AFAIK,这不能通过一个简单的正则表达式来完成(特别是确保一个字母最多只出现两次。你可以做一堆像

这样的表达式
[^a]*(a[^a]*(a[^a]*))
[^b]*(b[^b]*(b[^b]*))
....

并且(匹配意味着验证失败):

[^a]*aa[^a]*
[^b]*bb[^b]*

但显然这不是个好主意。

字符不会一起重复的条件也许可以用捕获组来处理,但我几乎可以肯定另一个不能用正则表达式进行检查。

顺便说一句......为什么对正则表达式的痴迷?编程这些检查是微不足道的,正则表达式在一组案例中很有用,但不是每个检查都可以用正则表达式完成。