我想编写一个java程序来掩盖输入字符串中的特定ip地址
例如
String input = "AAA192.10.*BBB10.92.*"
要求:要屏蔽的IP地址为10.*
,因此它应该屏蔽以10.
开头的所有IP地址
因此输出应为AAA192.10.*BBBYYYYYYY
(用10.92.*
替换Y
的每个字符
我需要匹配正则表达式10.*
以匹配以10.
开头的所有IP地址
答案 0 :(得分:0)
不要使用正则表达式进行IP。你几乎总是弄错了。即使你有可能做到正确,也是在如此小的角落里,使整个练习毫无意义。
例如,屏蔽192.168.128.0/15的正则表达式是什么?请记住,使用此模式,192.168.120.35和192.168.129.35位于不同的网络中。
/ 14,/ 13,/ 12等会变得更糟。
虽然他们将“网络匹配器”实现为PostgreSQL功能,但OpenNMS上的人们做了类似于你正在做的事情。它必须重写几次才能脱离它的正则表达根源并进入现代世界。它造成的问题多于修复过的问题。
由于您已经可以使用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;
}
(ÓscarLópez的信用)这个片段
任何与正则表达式相同的尝试都会变得更大,更不可能是正确的。