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

Java 使用find方法时部分正则表达式检查返回false,java,regex,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(

我有一个输入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();
我希望部分检查为真,但它给出的是假
它在这个在线正则表达式检查中给出了一个匹配项

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

“字符串”
中的引号不是字符串的一部分。同样,
/someregex/
中的斜杠也不是regex的一部分

因此,在Java中使用正则表达式时,不应包含以下斜杠:

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

如果您这样做,它们将被解释为您想要逐字匹配斜杠。

Java正则表达式模式不采用正斜杠分隔符,就像在PHP等其他语言中一样。此外,由于需要部分匹配,因此应使用以下模式:

^(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()


/
不是正则表达式的一部分。它们是Perl和Javascript中的正则表达式分隔符。您不是在编写Javascript,而是在编写Java。@MarkJeronimus许多语言都使用分隔符(例如PHP)。@MarkJernimus感谢您在使用
find()
而不是
matches()
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");
}