繁体   English   中英

关于Java中的Regex和模式编译

[英]Regard Regex and pattern compilation in java

请给我正则表达式中用于Java密码验证的代码,该代码应由一个大写字母,一个整数,一个以下符号(@,#,$,%,^,&,+,=)和小字符组成。

我一直在尝试使用不同的独立正则表达式和一个组合正则表达式。

实际上,我已经有一个用于评估javascript中所有条件的正则表达式。 我无法在Java后端中使用它。 我尝试通过转义\\尝试。 它也无法正常工作。

这是我的代码:

    Pattern pattern = Pattern.compile("/.*(?=.{6,})(?=.*\\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%^&+=]).*$/");
    Matcher matcher = pattern.matcher("Aa@1");
    if(matcher.matches()){
        System.out.println("Matched");
    }
    else{
        System.out.println("No mat");
    }

原始的javascript正则表达式是

/.*(?=.{6,})(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%^&+=]).*$/

由于字符转义, \\d给了我错误。 因此,我在Java版本中添加了另一个\\

我无法理解出了什么问题。

提前致谢。

您快到了,但是您错过了一些细节:

首先,起点很糟糕-JavaScript正则表达式很丑陋。 代替

/.*(?=.{6,})(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%^&+=]).*$/

用这个:

/^(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%^&+=]).{6,}$/

然后,要将正则表达式转换为Java,您需要删除定界符(并使用引号,而不是像您一样另外使用)并加倍反斜杠(就像您已经做过的那样):

Pattern pattern = Pattern.compile("^(?=.*\\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%^&+=]).{6,}$");

现在应该可以了。

在Java中,您不需要/ 它实际上会匹配一个斜杠。 另外,前导.*是没有用的(尽管它不会影响结果)。

Pattern pattern = Pattern.compile("(?=.{6,})(?=.*\\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%^&+=]).*$");

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM