代码之家  ›  专栏  ›  技术社区  ›  mplungjan Gvidas

Regexp使IP地址正常化(用零填充)

  •  4
  • mplungjan Gvidas  · 技术社区  · 14 年前

    我有一个日志文件的副本,我想更容易查看/编辑。
    我使用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 回复  |  直到 14 年前
        1
  •  3
  •   Grant Peters    10 年前

    不是很完整,一行你想要的,但它至少把它降到两行,而不是你目前的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
  •  2
  •   mplungjan Gvidas    14 年前

    好吧,我决定不止一次。我把它贴在这里以备将来参考,或者万一有人想出一个正则表达式

    ^([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 
    
        3
  •  0
  •   Tomalak    14 年前

    "." ,pad,连接。不需要正则表达式。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