Java Regex - 这些部分的作用是什么?

时间:2014-09-28 15:25:43

标签: java regex expression

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个字符?

2 个答案:

答案 0 :(得分:0)

?= 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/

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

答案 1 :(得分:0)

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

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

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