Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从封闭字符串中提取IP地址和端口的简单Java正则表达式_Java_Regex_Port_Extract_Ip Address - Fatal编程技术网

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

从封闭字符串中提取IP地址和端口的简单Java正则表达式,java,regex,port,extract,ip-address,Java,Regex,Port,Extract,Ip Address,考虑一对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*)

考虑一对
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*))?
(?[^\s,]+[^\s,:\.])((/):)(?\d*)?
提取同一字符串中的地址和端口

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

使用:


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

如果简单且长,这不是问题,请检查此项(没有端口,但可以附加端口)为什么是正则表达式?正则
String
方法在这里更好。我见过许多这样的正则表达式,但正在寻找一个简单的。:-)它适用于IPv4,但不包括IPv6。谢谢和+1。你能给我一个IPv6地址的示例吗?IPv6地址包含数字[0-9],字母[a-F]和:符号,例如
1234:ab8:46a3::2a8e:567:1234
是IPv6地址。好的。冒号的数量:在端口号冒号之前固定?即4?不,它可以是任何数字,从0到相当多,而且你永远不可能知道确切的数字。正则表达式不是解决这个问题的方法,PNS。它们是唯一的方法。地址/端口对是从一个长字符串中提取出来的,正如我在问题中所说,这个长字符串还有其他需要提取的字段。因此,我要求的正则表达式将是更长的正则表达式的一部分。
InetAddressValidator validator = InetAddressValidator.getInstance();
if (validator.isValid(ipAddress) {
   // cool, isn't valid
}
throw new InvalidAddressException(ipAddress);
([0-9.]*)(\/|:)([0-9]*)