2014-07-07 151 views
-1

我想编写一个java程序来掩盖输入字符串中的特定ip地址。java掩码ip地址

String input = "AAA192.10.*BBB10.92.*" 

要求:IP地址掩码是10.*所以应该掩盖与10.

所以输出应该是AAA192.10.*BBBYYYYYYY开始的所有IP地址(它取代Y10.92.*每个字符)

我需要匹配正则表达式10.*以匹配以10.

+0

输入...对我来说似乎很奇怪。它真的试图表示什么? – Makoto

+0

输入由字符串和IP地址组成。我需要解析输入字符串,并需要用某些字符来掩饰特定的IP地址。 – user3809619

+0

你的问题不清楚。我不知道你定义的“掩码”和你期望的输入/输出 – gerrytan

回答

0

开头的所有IP地址不要做IP与正则表达式。你几乎总是弄错了。即使你有可能做出正确的选择,但在这样的小角落案例中,整个练习都是毫无意义的。

例如,掩码192.168.128.0/15的正则表达式是什么?请记住,在这种模式下,192.168.120.35和192.168.129.35位于不同的网络中。

它得到与/ 14更糟的是,/ 13,/ 12等

在OpenNMS的的乡亲做类似于你在做什么了一段时间回来的东西,虽然他们实现自己的“网络匹配”作为PostgreSQL函数。它必须被重写几次,才能从它的正则表达式根植到现代世界中。它造成的问题比修正更多。

由于您已经有Java,所以请使用Java网络类。它们比任何可以拼凑在一起的正则表达式解决方案都强大得多。例如,你可以看看如何确定两个地址是否在同一个网络中。

public static boolean sameNetwork(InetAddress ip1, InetAddress ip2, String mask) 
throws Exception { 

    byte[] a1 = ip1.getAddress(); 
    byte[] a2 = ip2.getAddress(); 
    byte[] m = InetAddress.getByName(mask).getAddress(); 

    for (int i = 0; i < a1.length; i++) 
     if ((a1[i] & m[i]) != (a2[i] & m[i])) 
      return false; 

    return true; 

} 

(信用奥斯卡·洛佩斯)对这个片段

任何企图做正则表达式同样将是大得多且不太可能是正确的。