我想编写一个java程序来掩盖输入字符串中的特定ip地址。java掩码ip地址
String input = "AAA192.10.*BBB10.92.*"
要求:IP地址掩码是10.*
所以应该掩盖与10.
所以输出应该是AAA192.10.*BBBYYYYYYY
开始的所有IP地址(它取代Y
的10.92.*
每个字符)
我需要匹配正则表达式10.*
以匹配以10.
我想编写一个java程序来掩盖输入字符串中的特定ip地址。java掩码ip地址
String input = "AAA192.10.*BBB10.92.*"
要求:IP地址掩码是10.*
所以应该掩盖与10.
所以输出应该是AAA192.10.*BBBYYYYYYY
开始的所有IP地址(它取代Y
的10.92.*
每个字符)
我需要匹配正则表达式10.*
以匹配以10.
开头的所有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;
}
(信用奥斯卡·洛佩斯)对这个片段
任何企图做正则表达式同样将是大得多且不太可能是正确的。
输入...对我来说似乎很奇怪。它真的试图表示什么? – Makoto
输入由字符串和IP地址组成。我需要解析输入字符串,并需要用某些字符来掩饰特定的IP地址。 – user3809619
你的问题不清楚。我不知道你定义的“掩码”和你期望的输入/输出 – gerrytan