2012-05-09 45 views
2

如何使用正则表达式提取下面的字符串的IP?如何使用正则表达式提取字符串的IP

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

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

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


在此先感谢。

+1

@“\ b \ d {1,3} \。\ d {1,3} \。\ d {1,3} \。\ d {1,3} \ b”将匹配IP地址,一般为 –

+0

@Andrew:那么,这将匹配999.999.999.999以及 – Vlad

+0

@Vlad ...是的,但使用正则表达式匹配**有效的** ip地址看起来像一个噩梦的场景,我的表情对于拉出可能的候选者非常稳固。 –

回答

6

试试这个:

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

为了澄清......你不工作的原因是因为你只有[]内匹配.。一个.只匹配一个字符。您可以添加一个*(零个或多个)或一个+(一个或多个)以使其工作。另外,在括号中围绕它:(),意味着您可以直接从MatchCollection中的第二项提取IP地址。

+1

Prob应该在'。'之前加一个反斜杠。比赛。 –

+0

@Jon Grant,如果它是\ d {1,3}以确保它最多只有三个字符并且至少有一个字符,会更好。 –

+0

糟糕,斑点:) –

2

试试这个:

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

也许'\ s *',为了更灵活? – Vlad

2

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

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

如果切换模式将返回结果中的 “IP” 组

3

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

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

相关问题