2010-06-09 42 views
0

將字符串中的所有鏈接和電子郵件地址與列表數組進行匹配的最簡單方法是什麼?我在PHP中使用preg_match,但在C#中,它看起來會有所不同。查找字符串中的所有鏈接和電子郵件地址

+0

你問的是一個正則表達式,還是你問如何在C#中使用它? – SLaks 2010-06-09 14:09:22

+0

Duplicate:http://stackoverflow.com/questions/591859/a-regex-that-validates-a-web-address-and-matches-an-empty-string – serhio 2010-06-09 14:11:09

+0

通過「鏈接」你的意思只是http [s]地址還是包含mailto :, javascript :,等等? – Humberto 2010-06-09 14:11:13

回答

1

假設你已經有一個工作正則表達式,你可以使用Regex class,就像這樣:

static readonly Regex linkFinder = new Regex(@"https?://[a-z0-9.]+/\S+|\[email protected]\S+\.\S+", RegexOptions.IgnoreCase); 

foreach(Match match in linkFinder.Matches(someString)) { 
    //Do things... 
    string url = match.Value; 
    int position = match.Index; 
} 
+1

fogot「:」https後? – serhio 2010-06-09 14:07:44

+0

@serhio:'\ S +'應該匹配所有的。我主要試圖演示如何使用正則表達式。 – SLaks 2010-06-09 14:16:58

-1

這應該環節的工作:

https?://([-\w\.]+)+(:\d+)?(/([\w/_\.]*(\?\S+)?)?)? 

Source

這應該致電郵地址:

[A-Z0-9._%+-][email protected][A-Z0-9.-]+\.[A-Z]{2,4} 

Source

+0

-1:「email正則表達式」無法匹配的頂級域名(例如.museum TLD)。而域應該是小寫的,所以實際上它不會匹配任何。正則表達式是查找電子郵件地址的錯誤工具。 – Richard 2010-06-09 14:11:55

+1

@Richard:正則表達式不是找到電子郵件的「錯誤工具」。他們**完全是正確的工具**。他們是錯誤的**工具來**解析**和**驗證**,但查找字符串是正則表達式的目的。 – 2010-06-09 14:16:09

+0

@John:對於任何簡短的正則表達式,都會有無效的電子郵件地址。 (例如,在Q中的那個,許多O'Reillys會感到失望。) – Richard 2010-06-10 10:53:02

相關問題