正则表达式部分检查,使用find方法返回false

时间:2019-05-25 08:42:59

标签: java regex

我有一个输入000.100.112,它给下面的给定代码输入false,我只需要部分检查是否存在返回true 局部检查正在

中进行
     String emailRegex="/^(000\\.000\\.|000\\.100\\.1|000\\.[36])/";
    Pattern thePattern = Pattern.compile(emailRegex);
    Matcher m = thePattern.matcher(data);
    if (m.matches()) {
        return true;
    }
    return m.find();

我期望部分检查为true,但为false enter image description here   它在此在线正则表达式检查中提供了匹配项

2 个答案:

答案 0 :(得分:1)

Java正则表达式模式不使用斜杠定界符,就像在其他语言(例如PHP)中那样。另外,由于您希望进行 partial 匹配,因此应使用以下模式:

^(000\.000\.|000\.100\.1|000\.[36]).*
                                  ^^^^ necessary

请注意模式末尾的.*,否则部分匹配将不起作用。

String emailRegex="^(000\\.000\\.|000\\.100\\.1|000\\.[36]).*";
Pattern thePattern = Pattern.compile(emailRegex);
Matcher m = thePattern.matcher("000.100.112");
if (m.matches()) {
    System.out.println("MATCH");
}

编辑:

正如@MarkMobius所指出的,您也可以将原始模式与Matcher#find()一起使用:

String emailRegex="^(000\\.000\\.|000\\.100\\.1|000\\.[36])";
Pattern thePattern = Pattern.compile(emailRegex);
Matcher m = thePattern.matcher("000.100.112");
if (m.find()) {
    System.out.println("MATCH");
}

答案 1 :(得分:0)

您的在线正则表达式测试仪使用JavaScript正则表达式文字。在JavaScript中,正则表达式可以用/.../分隔。您在在线正则表达式测试器中看到的开头和结尾的/实际上不是正则表达式模式的一部分。它们就像Java字符串中的引号。

"string"中的引号不是字符串的一部分。同样,/someregex/中的斜杠也不是正则表达式的一部分。

因此,当您在Java中使用正则表达式时,不应包含这些斜杠:

String emailRegex="^(000\\.000\\.|000\\.100\\.1|000\\.[36])";

如果这样做,它们将被解释为就像您要在字面上匹配斜杠一样。