【问题标题】:regex repeated character count正则表达式重复字符数
【发布时间】:2011-08-03 16:09:37
【问题描述】:

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

【问题讨论】:

  • 用什么编程语言?

标签: java regex character repeat


【解决方案1】:

你可以使用类似的东西:

/^
  (?:(.)
     (?!\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]*

但显然这不是个好主意。

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

顺便说一句...为什么对正则表达式如此着迷?编写这些检查很简单,正则表达式在一组情况下很有用,但并非每项检查都可以用正则表达式完成。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-27
    • 2012-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多