我有一个IP,如“127.000.000.001“,如何删除前导零以获得“127.0.0.1“?现在我使用regex,如下所示
Regex.Replace("127.000.000.001", "0*([0-9]+)", "${1}")
有没有其他不使用正则表达式的方法来实现这个结果?我使用Visual C# 3.0编写此代码
svgewumm1#
IP地址对象会将前导零视为八进制,因此不应使用它来删除前导零,因为它不会处理192.168.090.009。http://social.msdn.microsoft.com/Forums/en-US/netfxbcl/thread/21510004-b719-410e-bbc5-a022c40a8369
epfja78i2#
是的,有一个比使用正则表达式更好的方法。请尝试System.Net.IpAddress class。有一个ToString() method,它将以标准符号返回IP地址的可读版本,这可能就是您想要的。
System.Net.IpAddress
ToString()
zkure5ic3#
正如@布伦特所述,IPAddress.TryParse将前导零视为八进制,这将导致错误的答案。解决此问题的一种方法是使用RegEx.Replace来进行替换。我个人喜欢这种查找0后跟任意数量数字的方法。
IPAddress.TryParse
RegEx.Replace
Regex.Replace("010.001.100.001", "0*([0-9]+)", "${1}")
它将返回10.1.100.1。只有当整个文本是一个IP地址时,这才有效。
10.1.100.1
kpbwa7wx4#
我不需要regex来做这个,你可以做这样的事情。
IPAddress IP = IPAddress.Parse("127.000.000.001"); IP.ToString()
0tdrvxhp5#
你可以使用下面用C写的逻辑。
#include<stdio.h> #include<string.h> #include <arpa/inet.h> int main(int argc, char** argv) { int inlen=strlen(argv[1])+1, cnt=0, dstcnt=0; char dststr[INET_ADDRSTRLEN]=""; if(argc<2) { printf("usage: ipvalidator [ip]\n"); return 0; } for(cnt=0; cnt<inlen; cnt++) { if(argv[1][cnt]=='\0') { break; } if( (argv[1][cnt]=='0') && (argv[1][cnt+1] == '0') && ((cnt==0) ||(argv[1][cnt-1] == '.') || (argv[1][cnt-1] == '0')) ) { continue; } if( (argv[1][cnt]=='0') && (argv[1][cnt+1] >= '1') && (argv[1][cnt+1] <= '9') && ((cnt==0) || (argv[1][cnt-1] == '.') || (argv[1][cnt-1] == '0')) ) { continue; } dststr[dstcnt++] = argv[1][cnt]; } dststr[dstcnt++] = '\0'; printf("New IP String: %s\n",dststr); return dstcnt; }
5条答案
按热度按时间svgewumm1#
IP地址对象会将前导零视为八进制,因此不应使用它来删除前导零,因为它不会处理192.168.090.009。
http://social.msdn.microsoft.com/Forums/en-US/netfxbcl/thread/21510004-b719-410e-bbc5-a022c40a8369
epfja78i2#
是的,有一个比使用正则表达式更好的方法。
请尝试
System.Net.IpAddress
class。有一个
ToString()
method,它将以标准符号返回IP地址的可读版本,这可能就是您想要的。zkure5ic3#
正如@布伦特所述,
IPAddress.TryParse
将前导零视为八进制,这将导致错误的答案。解决此问题的一种方法是使用RegEx.Replace
来进行替换。我个人喜欢这种查找0后跟任意数量数字的方法。它将返回
10.1.100.1
。只有当整个文本是一个IP地址时,这才有效。kpbwa7wx4#
我不需要regex来做这个,你可以做这样的事情。
0tdrvxhp5#
你可以使用下面用C写的逻辑。