【问题标题】:Java Regex - What does each of these parts do?Java Regex - 这些部分的作用是什么?
【发布时间】:2014-11-23 01:13:36
【问题描述】:
if(password.matches("(?=.*[0-9].*[0-9])(\\w{8,})") )
        System.out.println("Valid Password");
    else
        System.out.println("Invalid Password");

我正在检查密码以确保其长度至少为 8 个字符,可以是字母或数字,并且必须至少包含 2 位数字。这似乎对我有用,但我只是想确认我做对了。此外,我一直在努力研究并弄清楚每件作品的确切作用。以下是我认为每个部分都在做的事情,但如果我不正确,请您解释一下特定部分实际上在做什么。谢谢

?= 告诉程序记住是否找到了我正在寻找的数字 [0-9] ?

.* 表示任意数量的 [0-9]?

[0-9] 指定 0-9 之间的任意数字。

.*[0-9] 然后正则表达式从 0-9 寻找另一个数字?

(\\w{8,}) 查找任何字母(大写或小写)和数字,最小长度为 8 个字符?

【问题讨论】:

标签: java regex expression


【解决方案1】:
?= is a positive look ahead, That means that it is searching for something ahead of it.

http://www.regular-expressions.info/lookaround.html

有关未来展望的更多信息。

http://rubular.com/

非常适合测试任何正则表达式。

【讨论】:

    【解决方案2】:

    该正则表达式有两个主要部分:

    1. (?=.*[0-9].*[0-9])
    2. (\\w{8,})

    第 1 部分是积极展望,其形式为(?=pattern)。 “环顾四周”(正面/负面观察后面/前面)断言,而不消耗(或捕获)相邻输入匹配特定模式。在这种情况下,它断言当前点之后的输入包含(至少)2 个数字(.* 表示 0-n 个字符,[0-9] 表示任何数字字符)。顺便说一句,它可以更简洁地表达为(?=(.*[0-9]){2}

    第 2 部分的意思是“至少 8 个单词字符” - 单词字符是任何字母、任何数字或下划线。它周围的括号(不必要地)将 8 个以上的单词字符捕获为第 1 组

    【讨论】:

      猜你喜欢
      • 2013-01-16
      • 1970-01-01
      • 1970-01-01
      • 2011-05-15
      • 1970-01-01
      • 2019-04-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多