Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/377.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 正则表达式删除任何ipv6地址的前导零_Java_Regex_Regex Negation - Fatal编程技术网

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

Java 正则表达式删除任何ipv6地址的前导零,java,regex,regex-negation,Java,Regex,Regex Negation,如何从任何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:: 我需要在上面的正则表达式中更改什么 .replaceAll("(^|[^0-9A-F

如何从任何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:: 
我需要在上面的正则表达式中更改什么

.replaceAll("(^|[^0-9A-Fa-f])0+([0-9A-Fa-f])", "$1$2")
将从数字运行中删除前导零

显然,这会对带有小数点或无数分隔符的数字造成不利影响,如
“1002003.04”


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

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

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

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

 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。只需删除第一个分组的零,而不是全部,您的正则表达式正在删除所有零并替换为“:”。前导零工作正常。它的给出形式为:2001:DB8:::476:,:2001之前,这是无效的。但前导零将被删除。