我想使用正则表达式验证带或不带端口号的 IP 地址。我的输入字符串是 IP:PORT
或只是 IP
。我只想要一个 regex
来验证 IP:PORT
或 IP
两者。
我的 IP 地址正则表达式是:
^(?:(?:1\d?\d|[1-9]?\d|2[0-4]\d|25[0-5])\.){3}(?:1\d?\d|[1-9]?\d|2[0-4]\d|25[0-5])$
有人可以告诉我如何向这个现有的正则表达式添加可选端口号吗?
最佳答案
为什么这么复杂:谷歌搜索:http://answers.oreilly.com/topic/318-how-to-match-ipv4-addresses-with-regular-expressions/
您还试图在一个地方做太多事情。将正则表达式用于它的优点,然后将其他智能用于正则表达式不是正确工具的地方。在您的情况下,不要尝试验证正则表达式中 IP 地址的值范围,而是在后处理中:
.... ^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})(:(\d{1,5}))?$
byte[] ip = new byte[4];
for (int i = 1; i <= 4; i++) {
int bt = Integer.parseInt(matcher.group(i));
if (bt < 0 || bt > 255) {
throw new IllegalArgumentException("Byte value " + bt + " is not valid.");
}
ip[i-1] = (byte)bt;
}
integer port = 0;
if (matcher.group(6) != null) {
port = Integer.parseInt(matcher.group(6));
}
关于java - java中的ip地址是否有效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16402078/