5

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

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

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

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


提前致谢。

4

5 回答 5

7

试试这个:

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

澄清......你的不起作用的原因是因为你只.[and内匹配]。single.仅匹配单个字符。您可以添加一个*(零个或多个)或一个+(一个或多个)以使其工作。此外,用括号括起来:(),意味着您可以直接从MatchCollection.

于 2012-05-09T15:25:20.840 回答
4

如果您将模式切换到

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

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

于 2012-05-09T15:36:58.657 回答
3

您可以将分组与您的正则表达式一起使用:

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

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

于 2012-05-09T15:28:29.527 回答
2

试试这个:

string pattern = @"remip\s\[.+?\]";
MatchCollection mc = Regex.Matches(stringToSearch, pattern );
于 2012-05-09T15:25:37.357 回答
1

试试这个。

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 );
于 2021-06-23T05:50:39.247 回答