java - 如何使用正则表达式检查正则表达式?
问题描述
我有一组特殊格式的 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 时,它总是给出“错误”。我花了相当长的时间寻找这个解决方案,但我找不到它,也无法自己解决如何去做。有谁能帮助我吗?
更新整个代码片段:
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));
}
}
}
解决方案
推荐阅读
- wordpress - 带有 ACF 字段的 Wordpress 查询附件
- amazon-web-services - 是否可以通过 SSH 连接到 FARGATE 托管容器实例?
- python - 使用 apply_async 写入文件
- html - Firefox 上的动画不起作用(仅限 CSS)
- java - ArrayList 打印重复元素
- c# - UpdatePanel 中的列表框不会第二次触发
- node.js - Node.js + Express - 如何记录请求正文和响应正文
- android - 如何更好地理解错误以进行修复
- java - 需要回调方法实现
- ios - Swift 3 和 Swift 4 中的 WebService API 方法?