【问题标题】:Private IP regex not working in Java私有 IP 正则表达式在 Java 中不起作用
【发布时间】:2016-02-17 14:21:56
【问题描述】:

我试图让这个例子在 Java 中工作: Private IP Address Identifier in Regular Expression

我想检查一个 IP 是否是私有 IP,除了 127.x.x.x

但是我要疯了,这段代码有什么问题?:

private static final Pattern patternPrivateNotLocal = Pattern.compile("(^10\\.)|(^172\\.1[6-9]\\.)|(^172\\.2[0-9]\\.)|(^172\\.3[0-1]\\.)|(^1‌​92\\.168\\.)");
public static boolean isPrivateAndNotLocalIP(String ip)
{
    return  patternPrivateNotLocal.matcher(ip).matches();
}

ip = "192.168.122.1"时,该方法返回我false

【问题讨论】:

  • coud 可以在正则表达式的每个右括号后添加一个.* 以使其正常工作。
  • 将“匹配”更改为“查找”
  • @nafas patternPrivateNotLocal.matcher(ip).find(); 也不起作用
  • 您的正则表达式中有 1 到 92 之间的不可见字符
  • @zapl 一个零宽度的非连接符和一个零宽度的空格。多么聪明的方法可以阻止人们从 internetz 盲目复制您的代码。

标签: java regex ipv4


【解决方案1】:

我复制并粘贴了您的代码以重试,但令我惊讶的是它对我不起作用,然而,我重新输入所有内容并开始工作。

不能肯定,但一定是编码问题。

只需尝试“重新输入”所有内容并将matches()更改为find()

如果你要使用matches方法,你必须匹配全文例如

(^10\\.) 应改为(^10\\..*)

find 方法在哪里找到 first token matched 并返回 true(如果有)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-22
    • 1970-01-01
    • 2020-07-08
    相关资源
    最近更新 更多