简单的Java正则表达式从封闭字符串中提取IP地址和端口

时间:2015-04-20 20:03:25

标签: java regex port extract ip-address

考虑一对IPv4IPv6地址和端口,由/:分隔,例如

10.10.10.10:1234

端口是可选的,所以像

这样的字符串
10.10.10.10/
10.10.10.10:
10.10.10.10

也有效。地址/端口对后面可能跟有空格或逗号字符,它是更长的封闭字符串的一部分。

从封闭字符串中提取单独字段中的2个值(不使用字符串操作函数),这是一个非常简单的正则表达式吗?

例如,像

这样的表达式
(?<address>[^\s,]+[^\s,:\.])((/|:)(?<port>\d*))?

在同一个字符串中提取地址和端口。

这里的目标是使用最简单的正则表达式进行提取,即使它不是100%准确(即使它也匹配其他字符串)。

2 个答案:

答案 0 :(得分:2)

([0-9.]*)(\/|:)([0-9]*)

这是正则表达式。第一组给你IP。第三组为您提供端口号。中间组给出分隔符,即:用于交替。它可以被忽略。

答案 1 :(得分:1)

使用commons validator

InetAddressValidator validator = InetAddressValidator.getInstance();
if (validator.isValid(ipAddress) {
   // cool, isn't valid
}
throw new InvalidAddressException(ipAddress);