正则表达式重复字符计数

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

你可以使用类似的东西:

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

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


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

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

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

 [^a]*(a[^a]*(a[^a]*)) [^b]*(b[^b]*(b[^b]*)) .... 

而且(匹配意味着validation失败):

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

但显然这不是好主意。

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

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