【问题标题】:How to extract the IP of the string using RegEx如何使用 RegEx 提取字符串的 IP
【发布时间】:2012-05-18 03:32:25
【问题描述】:

如何使用RegEx提取下面字符串的IP?

... sid [1544764] srv [CFT256] remip [10.0.128.31] fwf [] ...

我尝试了下面的代码,但没有返回预期值:

字符串模式 = @"remip\\[.\]"; MatchCollection mc = Regex.Matches(stringToSearch, pattern);


提前致谢。

【问题讨论】:

  • @"\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\b" 将一般匹配ip地址
  • @Andrew:好吧,这也将匹配 999.999.999.999
  • @Vlad... 是的,但是使用正则表达式匹配 有效 ip 地址似乎是一场噩梦,我的表达方式非常适合提取可能的候选人。
  • @Andrew:我想知道 0000127.0.0.00000001 是否是一个有效的 IP 地址:-P
  • @Vlad 由于单词边界,我的表达式不匹配。当然,它会匹配 0000.127.0.0.0.0000001,但那就太麻烦了! (我也发布了评论而不是答案,因为我认为这可能对他有帮助,但不是对他的问题的具体答案,最好使用 remip 上下文)

标签: c# regex string ip


【解决方案1】:

试试这个:

@"remip \[(\d+\.\d+\.\d+\.\d+)\]"

澄清......你的原因不起作用是因为你只匹配[]内的.。单个 . 仅匹配单个字符。您可以添加*(零个或多个)或+(一个或多个)使其工作。另外,用括号括起来:(),表示您可以直接从MatchCollection 的第二项中提取IP 地址。

【讨论】:

  • Prob 应该在你的 '.' 之前添加一个反斜杠。匹配。
  • @Jon Grant,如果是 \d{1,3} 会更好,以确保它最多三个字符,最少一个。
  • @M 是的,我考虑过。这取决于他们想要的具体程度。换一种方式,你可以简单地匹配[0-9.]+
【解决方案2】:

如果你把模式切换到

string pattern = @"remip\s*\[[^\]]*\]";

您将能够匹配地址字符串,即使它有错误(例如,包含非数字、没有足够的点等)。无论如何,您很可能最终会在代码中验证地址,因此捕获 打算 用作 IP 地址的内容,在代码中显式验证它并生成更有意义的错误信息。

【讨论】:

    【解决方案3】:

    您可以使用正则表达式进行分组:

    @"remip\s\[(?<IP>\d+.\d+.\d+.\d+)\]"
    

    它会在“IP”组中返回结果

    【讨论】:

      【解决方案4】:

      试试这个:

      string pattern = @"remip\s\[.+?\]";
      MatchCollection mc = Regex.Matches(stringToSearch, pattern );
      

      【讨论】:

      • 或许\s*,为了更灵活?
      【解决方案5】:

      试试这个。

      String zeroTo255
                  = "(\\d{1,2}|(0|1)\\"
                    + "d{2}|2[0-4]\\d|25[0-5])";
       
              // Regex for a digit from 0 to 255 and
              // followed by a dot, repeat 4 times.
              // this is the regex to validate an IP address.
              String regex
                  = zeroTo255 + "\\."
                    + zeroTo255 + "\\."
                    + zeroTo255 + "\\."
                    + zeroTo255;
       
          
              
              MatchCollection mc = Regex.Matches(text, regex );
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-06-24
        • 2019-03-14
        • 2023-01-07
        • 1970-01-01
        相关资源
        最近更新 更多