我需要正则表达式来检测所有带端口和不带端口但除外的IP
93.153.31.151(:27002)
和
10.0.0.1(:27002)
我有一些但我需要添加异常(exception)
\\d{1,3}(?:\\.\\d{1,3}){3}(?::\\d{1,5})?
对于java匹配器
String numIPRegex = "\\d{1,3}(?:\\.\\d{1,3}){3}(?::\\d{1,5})?";
if (pA.matcher(msgText).find()) {
this.logger.info("Found");
} else {
this.logger.info("Not Found");
}
最佳答案
没有对可以以结构化方式处理 IP 地址的更适合的 Java 类做出声明......
您可以使用否定先行向正则表达式添加异常:
String numIPRegex = "(?!(?:93\\.153\\.31\\.151|10\\.0\\.0\\.1)(?::27002)?)\\d{1,3}(?:\\.\\d{1,3}){3}(?::\\d{1,5})?";
解释:
(?! # start negative look-ahead (?: # start non-capturing group 93\.153\.31\.151 # exception address #1 | # or 10\.0\.0\.1 # exception address #2 ) # end non-capturing group (?: # start non-capturing group :27002 # port number )? # end non-capturing group; optional ) # end negative look-ahead \d{1,3}(?:\.\d{1,3}){3}(?::\d{1,5})? # your original expression
当然,另一种明显的替代方法是预先一个一个地测试异常,如果一个异常匹配则返回 false。将它们全部包装在一个大的正则表达式中很快就会变得非常难看。
关于java - 正则表达式有异常(exception),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14182556/