Как проверить выражение регулярного выражения с помощью регулярного выражения? - PullRequest
0 голосов
/ 02 февраля 2020

У меня есть набор IP-адресов в специальном формате, который я должен проверить, соответствует ли он необходимому шаблону регулярных выражений. Мой шаблон сейчас выглядит так:

private static final String FIRST_PATTERN = "([0-9]{1,3}\\\\{2}?.[0-9]{1,3}\\\\{2}?.[0-9]{1,3}\\\\{2}?.[0-9]{1,3})";

Этот шаблон позволяет мне проверять строгие IP-адреса и распознавать шаблон, когда IP-адреса имеют статус c, например: " 65 \\. 33 \\. 42 \\. 12 "или" 112 \\. 76 \\. 39 \\. 104, 188 \\. 35 \\. 122 \\. 148 ".

Однако я также должен иметь возможность искать некоторые нестати c IP-адреса, например:

"155 \\. 105 \\. 178 \\. (8 [1-9] | 9 [0-5]) "

или это:

" 93 \\. 23 \\. 75 \\. (1 (1 [6-9] | 2 [0-6])), 113 \ 202 \ 167 \\. (1 (2 [8-9] | [3-8] [0-9] ] | 9 [0-2])) "

Я пытался сделать это несколькими способами, но всегда выдает« false », когда пытаюсь сопоставить эти IP. Я долго искал это решение и не могу его найти, а также не могу понять, как это сделать сам. Кто-нибудь может мне помочь?

ОБНОВЛЕНИЕ Фрагмент всего кода:

public class IPAdressValidator {

Pattern pattern;
Matcher matcher;

private static final String FIRST_PATTERN = "([0-9]{1,3}\\\\{2}?.[0-9]{1,3}\\\\{2}?.[0-9]{1,3}\\\\{2}?.[0-9]{1,3})";

public IPAdressValidator() {
    pattern = Pattern.compile(FIRST_PATTERN);
}

public CharSequence validate(String ip) {
    matcher = pattern.matcher(ip);
    boolean found = matcher.find();
    if (found) {
        for (int i = 0; i <= matcher.groupCount(); i++) {

            int groupStart = matcher.start(i);
            int groupEnd = matcher.end(i);

            return ip.subSequence(groupStart, groupEnd);
        }
    }
    return null;
}

}

и мой Main:

publi c class Главная {

public static void main(String[] args) {

    IPAdressValidator validator = new IPAdressValidator();

    String[] ips = 
            "53\\\\.22\\\\.14\\\\.43",
            "123\\\\.55\\\\.19\\\\.137",
            "93\\.152\\.199\\.1",
            "(93\\.199\\.(?:1(?:0[6-7]))\\.(?:[0-9]|[1-9][0-9]|1(?:[0-9][0-9])|2(?:[0-4][0-9]|5[0-5])))",
            "193\\\\.163\\\\.100\\\\.(8[1-9]|9[0-5])",
            "5\\\\.56\\\\.188\\\\.130, 188\\\\.194\\\\.180\\\\.138, 182\\\\.105\\\\.24\\\\.15",
            "188\\\\.56\\\\.147\\\\.193,41\\\\.64\\\\.202\\\\.19"

    };

    for (String ip : ips) {
        System.out.printf("%20s: %b%n", ip, validator.validate(ip));
    }

}

}

...