如何用正则表达式检查正则表达式?

时间:2020-02-02 20:41:15

标签: java regex ip

我有一组特殊格式的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地址并识别该模式,例如:“ 65 \\。33 \\。42 \\。12”或“ 112 \\。76 \\” .39 \\。104、188 \\。35 \\。122 \\。148”。

但是,我也应该能够找到一些非静态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]))“

我尝试过几种方法,但是当尝试匹配那些IP时,它总是给出“ false”。我在这个解决方案上搜索了相当长的时间,但找不到它,也无法自行解决。有谁可以帮助我吗?

UPDATE整个代码段:

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;
}

}

和我的主要用户:

公共类主要{

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

}

}

0 个答案:

没有答案