【问题标题】:Regex to remove leading zero for any ipv6 address正则表达式删除任何 ipv6 地址的前导零
【发布时间】:2014-01-27 13:08:01
【问题描述】:

如何从任何 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:: 

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

【问题讨论】:

  • 你需要 2001:DB8:::476:: 还是 2001:DB8::0476:: ?
  • 我需要 2001:DB8::476:: ,前导零应该从任何地方删除!!
  • 如果去掉前导零,结果是 2001:DB8:::476:: ,对吧?
  • 是的,但是使用这个正则表达式它不起作用。该怎么做?
  • @Sujith For 2001:0db8:0:0000:00:000:0002:0000 --->2001:db8:::::2: 这不是有效的 ipv6 地址。它应该是 2001:db8::2:0:0。只有第一个分组的零不需要全部删除,您的正则表达式正在删除所有零并替换为“:”。前导零工作正常。

标签: java regex regex-negation


【解决方案1】:

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

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

结果将是:

 2001:DB8:::476::

【讨论】:

  • 它给出为 :2001:DB8:::476::, : before 2001 这是无效的。但将其删除为零。
【解决方案2】:
.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::")

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-13
    相关资源
    最近更新 更多