for(String paramName:paramNames){
    String regexString = regexPair.get(paramName);
    try{
        System.out.println(regexString);
        Pattern p = Pattern.compile(regexString);
        Matcher m = p.matcher(paramMap.get(paramName)[0]);
        status = m.matches();
    }catch(Exception e)
    {
        e.printStackTrace();
    }
    if(!status)
           break;
}

其中regexSring具有值
 "^(?!.*[^A-Za-z0-9@])((?=.*\\d)(?=.*[a-z]).{6,20})$"

regexString的值是从mysql数据库和填充在映射中的数据库中获取的,paramMap.get(paramName)[0]的值是"dssf55454"的,但它在返回true时返回false。
如果我编写以下示例程序
 Pattern p = Pattern.compile("^(?!.*[^A-Za-z0-9@])((?=.*\\d)(?=.*[a-z]).{6,20})$");
 Matcher m = p.matcher("mal4554SD");
 status = m.matches();
 System.out.println(status);

它返回真值。为什么?

最佳答案

问题可能出在\\d中的片段regexString中。
控制台上打印的结果是什么?

System.out.println(regexString);

此外,如果您能分享更多关于regexPair及其get()的详细信息,将会很有帮助。

09-11 05:08