正则表达式删除任何 ipv6 地址的前导零



如何从任何ipv6地址中删除前导零。

String resultString = subjectString.replaceAll("((?::0\b){2,}):?(?!\S*\b\1:0\b)(\S*)", "::$2");

它正在压缩到这种形式。

2001:0DB8:0:0:0476:: --> 2001:0DB8::0476::  

但它应该删除前导零,例如:

2001:DB8::476:: 

我需要在上述正则表达式中更改什么?

我可以给你一个简单的解决方案:

String subjectString="2001:0DB8:0:0:0476::";
String resultString = subjectString.replaceAll("(:(0)*)|(^0+)",":");
System.out.println(resultString);

结果将是:

 2001:DB8:::476::
.replaceAll("(^|[^0-9A-Fa-f])0+([0-9A-Fa-f])", "$1$2")

将从数字序列中删除前导零。

显然,这将对带有小数点或无数分隔符的数字造成坏事,如"1,002,003.04".


如果您不仅要从非零数字中删除前导零,还要删除0,那么您可以使用更简单的正则表达式:

"2001:0DB8:0:0:0476::".replaceAll("\b0+", "").equals("2001:DB8:::476::")

最新更新