частичная проверка регулярных выражений возвращает false при использовании метода find - PullRequest
0 голосов
/ 25 мая 2019

У меня есть вход 000.100.112, который дает ложь на входе для приведенного ниже кода, мне просто нужна частичная проверка, если существует, верните, истинная частичная проверка работает в

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

я ожидаю, что истина при частичной проверке, но это дает ложь enter image description here это дает совпадение в этой онлайн-проверке регулярных выражений

Ответы [ 2 ]

1 голос
/ 25 мая 2019

Шаблоны регулярных выражений 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");
}

Edit:

Как отметил @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");
}
0 голосов
/ 25 мая 2019

Ваш онлайн тестер регулярных выражений использует литерал JavaScript регулярных выражений.В JavaScript регулярные выражения могут быть разделены /.../.Те / в начале и в конце, которые вы видите в онлайн-тестере регулярных выражений, на самом деле не являются частью шаблона регулярных выражений.Они похожи на кавычки в строке Java.

Кавычки в "string" не являются частью строки.Аналогично, косые черты в /someregex/ не являются частью регулярного выражения.

Поэтому, когда вы используете свое регулярное выражение в Java, вы не должны включать эти косые черты:

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

Если вы делаете, они будут интерпретироваться так, как если бы вы хотели буквально сопоставить косые черты.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...