如何使用正则表达式提取下面的字符串的IP?如何使用正则表达式提取字符串的IP
... sid [1544764] srv [CFT256] remip [10.0.128.31] fwf []...
我尝试下面的代码,但没有返回预期值:
string pattern = @"remip\ \[.\]"; MatchCollection mc = Regex.Matches(stringToSearch, pattern);
在此先感谢。
如何使用正则表达式提取下面的字符串的IP?如何使用正则表达式提取字符串的IP
... sid [1544764] srv [CFT256] remip [10.0.128.31] fwf []...
我尝试下面的代码,但没有返回预期值:
string pattern = @"remip\ \[.\]"; MatchCollection mc = Regex.Matches(stringToSearch, pattern);
在此先感谢。
试试这个:
@"remip \[(\d+\.\d+\.\d+\.\d+)\]"
为了澄清......你不工作的原因是因为你只有[
和]
内匹配.
。一个.
只匹配一个字符。您可以添加一个*
(零个或多个)或一个+
(一个或多个)以使其工作。另外,在括号中围绕它:(
和)
,意味着您可以直接从MatchCollection
中的第二项提取IP地址。
Prob应该在'。'之前加一个反斜杠。比赛。 –
@Jon Grant,如果它是\ d {1,3}以确保它最多只有三个字符并且至少有一个字符,会更好。 –
糟糕,斑点:) –
试试这个:
string pattern = @"remip\s\[.+?\]";
MatchCollection mc = Regex.Matches(stringToSearch, pattern);
也许'\ s *',为了更灵活? – Vlad
您可以使用您的正则表达式分组:
@"remip\s\[(?<IP>\d+.\d+.\d+.\d+)\]"
如果切换模式将返回结果中的 “IP” 组
到
string pattern = @"remip\s*\[[^\]]*\]";
即使存在错误(例如错误),您仍然可以匹配地址字符串。包含非数字,没有足够的点等)。您很可能最终会验证代码中的地址,因此这可能是一个好主意,可以捕获意图将用作IP地址,在您的代码中显式验证它,并生成更有意义的错误消息。
@“\ b \ d {1,3} \。\ d {1,3} \。\ d {1,3} \。\ d {1,3} \ b”将匹配IP地址,一般为 –
@Andrew:那么,这将匹配999.999.999.999以及 – Vlad
@Vlad ...是的,但使用正则表达式匹配**有效的** ip地址看起来像一个噩梦的场景,我的表情对于拉出可能的候选者非常稳固。 –