如何使用 RegEx 提取下面字符串的 IP?
... sid [1544764] srv [CFT256] remip [10.0.128.31] fwf [] ...
我尝试了下面的代码,但没有返回预期值:
字符串模式 = @"remip\\[.\]"; MatchCollection mc = Regex.Matches(stringToSearch, pattern);
提前致谢。
试试这个:
@"remip \[(\d+\.\d+\.\d+\.\d+)\]"
澄清......你的不起作用的原因是因为你只.
在[
and内匹配]
。single.
仅匹配单个字符。您可以添加一个*
(零个或多个)或一个+
(一个或多个)以使其工作。此外,用括号括起来:(
和)
,意味着您可以直接从MatchCollection
.
如果您将模式切换到
string pattern = @"remip\s*\[[^\]]*\]";
您将能够匹配地址字符串,即使它有错误(例如包含非数字、没有足够的点等)。无论如何,您很可能最终会在代码中验证地址,因此捕获打算用作 IP 地址的内容、在代码中显式验证它并生成更有意义的错误消息可能是一个好主意。
您可以将分组与您的正则表达式一起使用:
@"remip\s\[(?<IP>\d+.\d+.\d+.\d+)\]"
它将在“IP”组中返回结果
试试这个:
string pattern = @"remip\s\[.+?\]";
MatchCollection mc = Regex.Matches(stringToSearch, pattern );
试试这个。
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 );