2012-05-09 44 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地址,在您的代碼中顯式驗證它,並生成更有意義的錯誤消息。

相關問題