考虑一对IPv4
或IPv6
地址和端口,由/
或:
分隔,例如
10.10.10.10:1234
端口是可选的,所以像
这样的字符串10.10.10.10/
10.10.10.10:
10.10.10.10
也有效。地址/端口对后面可能跟有空格或逗号字符,它是更长的封闭字符串的一部分。
从封闭字符串中提取单独字段中的2个值(不使用字符串操作函数),这是一个非常简单的正则表达式吗?
例如,像
这样的表达式(?<address>[^\s,]+[^\s,:\.])((/|:)(?<port>\d*))?
在同一个字符串中提取地址和端口。
这里的目标是使用最简单的正则表达式进行提取,即使它不是100%准确(即使它也匹配其他字符串)。
答案 0 :(得分:2)
([0-9.]*)(\/|:)([0-9]*)
这是正则表达式。第一组给你IP。第三组为您提供端口号。中间组给出分隔符,即:用于交替。它可以被忽略。
答案 1 :(得分:1)
InetAddressValidator validator = InetAddressValidator.getInstance();
if (validator.isValid(ipAddress) {
// cool, isn't valid
}
throw new InvalidAddressException(ipAddress);