正则表达式规范化(使用零填充)IP地址

时间:2010-07-28 06:07:00

标签: regex ip-address replace

我有一个日志文件的副本,我想让它更容易查看/编辑 我使用textpad删除我不想要的东西,我可以输入正则表达式作为搜索词,并在目标字段中使用 \ 1. \ 2. \ 3. \ 4 来捕获组。 /> 我想从

更改从每行开始的所有IP地址
[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}

[0-9]{3}\.[0-9]{3}\.[0-9]{3}\.[0-9]{3}
带有填充前导零的

如何一次性完成?

示例输入:

10.2.123.4
110.12.23.40
123.123.123.123
1.2.3.4

示例输出

010.002.123.004
110.012.023.040
123.123.123.123
001.002.003.004

看看我自己的答案是否有效

感谢您的输入

3 个答案:

答案 0 :(得分:2)

好的,我决定不止一次去做。我将它发布在这里以供将来参考,或者如果有人想出一个正则表达式

请注意,每个查找都有一个尾随空格,每个都替换

^([0-9]{1})\.([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3}) -> 00\1.\2.\3.\4 
^([0-9]{2})\.([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3}) -> 0\1.\2.\3.\4 

^([0-9]{3})\.([0-9]{1})\.([0-9]{1,3})\.([0-9]{1,3}) -> \1.00\2.\3.\4 
^([0-9]{3})\.([0-9]{2})\.([0-9]{1,3})\.([0-9]{1,3}) -> \1.0\2.\3.\4 

^([0-9]{3})\.([0-9]{3})\.([0-9]{1})\.([0-9]{1,3}) -> \1.\2.00\3.\4 
^([0-9]{3})\.([0-9]{3})\.([0-9]{2})\.([0-9]{1,3}) -> \1.\2.0\3.\4 

^([0-9]{3})\.([0-9]{3})\.([0-9]{3})\.([0-9]{1}) -> \1.\2.\3.00\4 
^([0-9]{3})\.([0-9]{3})\.([0-9]{3})\.([0-9]{2}) -> \1.\2.\3.0\4 

Textpad语法:

^\([0-9]\{1\}\)\.\([0-9]\{1,3\}\)\.\([0-9]\{1,3\}\)\.\([0-9]\{1,3\}\) -> 00\1.\2.\3.\4 
^\([0-9]\{2\}\)\.\([0-9]\{1,3\}\)\.\([0-9]\{1,3\}\)\.\([0-9]\{1,3\}\) -> 0\1.\2.\3.\4 

^\([0-9]\{3\}\)\.\([0-9]\{1\}\)\.\([0-9]\{1,3\}\)\.\([0-9]\{1,3\}\) -> \1.00\2.\3.\4 
^\([0-9]\{3\}\)\.\([0-9]\{2\}\)\.\([0-9]\{1,3\}\)\.\([0-9]\{1,3\}\) -> \1.0\2.\3.\4 

^\([0-9]\{3\}\)\.\([0-9]\{3\}\)\.\([0-9]\{1\}\)\.\([0-9]\{1,3\}\) -> \1.\2.00\3.\4 
^\([0-9]\{3\}\)\.\([0-9]\{3\}\)\.\([0-9]\{2\}\)\.\([0-9]\{1,3\}\) -> \1.\2.0\3.\4 

^\([0-9]\{3\}\)\.\([0-9]\{3\}\)\.\([0-9]\{3\}\)\.\([0-9]\{1\}\) -> \1.\2.\3.00\4 
^\([0-9]\{3\}\)\.\([0-9]\{3\}\)\.\([0-9]\{3\}\)\.\([0-9]\{2\}\) -> \1.\2.\3.0\4 

答案 1 :(得分:2)

不完整,你需要一个衬垫,但它至少会将它降低到两行而不是你当前的8行。

遵循您在答案中使用的相同格式:

^([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3}) -> 00\1.00\2.00\3.00\4

^0*([0-9]{3})\.0*([0-9]{3})\.0*([0-9]{3})\.0*([0-9]{3}) -> \1.\2.\3.\4

这种方式的工作原理是:

  1. 它填充所有数字,以便每个部分至少有3个数字
  2. 它从每个部分中精确抽出3个数字并忽略任何前导'0剩余

答案 2 :(得分:1)

吐在"."上,填充,加入。不需要正则表达式。即便如此,Regex也不会提供任何好处。

JavaScript,例如:

var ip = "110.12.23.40";

ip = ip.split(".").map( function(i) {
  return ("00"+i).slice(-3);
}).join(".");

alert(ip);  // 110.012.023.040