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

Simple Java regex to extract IP address and port from enclosing string

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

10.10.10.10:1234

端口是可选的,所以字符串如

10.10.10.10/
10.10.10.10:
10.10.10.10

也有效。 address/port 对后面可以跟 space 或逗号字符,它是更长的封闭字符串的一部分。

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

例如,像这样的表达式

(?<address>[^\s,]+[^\s,:\.])((/|:)(?<port>\d*))?

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

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

使用commons validator:

InetAddressValidator validator = InetAddressValidator.getInstance();
if (validator.isValid(ipAddress) {
   // cool, isn't valid
}
throw new InvalidAddressException(ipAddress);
([0-9.]*)(\/|:)([0-9]*)

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