2011-08-03 109 views
2

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

+1

用什么编程语言? – Qtax

+0

我需要这个在java –

回答

2

您可以使用类似:

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

的Perl引用,原子团可如果不支持被删除。


在Java中的正则表达式就可以这样写:

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

是的,这个工程很好。谢谢 –

+0

为什么投下来? – Qtax

+0

上帝保佑你:) –

-2

AFAIK,这不能用一个简单的正则表达式(尤其是完成,确保了一封信仅在最大出现了两次,你可以做了一堆表情像

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

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

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

,但显然这不是好主意

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

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

+0

我需要一些一般的东西 –

-2

一些人,当遇到一个问题,认为 “我知道,我将使用 正则表达式。”现在他们有两个问题。 - Jamie Zawinski

这不是适合正则表达式的问题域。你可以做一些可能适用于这一场景的神秘的东西,在本地Java中编写算法将更容易保持前进,所以下一个人不必去描述一些神秘的正则表达式来决定如何添加关于必须的下一个规则有UPPERCASE个字符和至少1个数字等。