2014-09-02 46 views
-1

目前正在使用此:正則表達式來替換文本中的網址?

MatchCollection urlRegExp = Regex.Matches(text, @"https?://(?:www\.)?[a-zA-Z0-9/;&=:_$+!*'()|~\[\]#%.\\-]+"); 

更換網址,文本,但它不會讓每一個網址,而且好像我找不到..一個良好的正則表達式這個任何人都可以幫助嗎?

+2

可能的重複[什麼是最好的正則表達式來檢查一個字符串是一個有效的URL?](http://stackoverflow.com/questions/161738/what-is-the-best-regular-expression-to -check-if-a-string-is-a-valid-url) – 2014-09-02 01:46:52

+0

你正在使用哪個平臺? – Steve 2014-09-02 01:47:15

+0

@ PM77-1:他/她並不試圖檢查一個url是否有效,而只是在文本中查找url,這是兩個完全不同的任務。 – 2014-09-02 01:54:56

回答

1

如果你需要在文本中找到URL,你不需要適應RFC(不管數字是多少),這是完全沒有用處的(而且在遵循標準的模式下幾乎不可能,它也會太慢複雜)。

文中的所有網址都應該被認爲是有效的(和/或必須在生成此文本的人被插入文本之前進行驗證,換句話說,這不是您的工作!)

所以,你必須找到其他方法。爲此,您必須提出正確的問題:如何區分文本中的URL?

讓我們列表中的通用標準

  • 的URL可以以協議開始:HTTP,HTTPS,FTP,SFTP,FTPS,地鼠,...
  • 的URL可以與www.
  • 開始一個URL不包含空格字符
  • 一個URL總是以字的邊界開始
  • URL可能在空白字符,字符串的結尾,除問題之外的標點符號之前結束標記(即使沒有GET參數可以存在)

這些要求,你可以很容易地建立HTTP協議的天真模式:

\b(https?://|www\.)\S+(?=\s|[^\P{P}?]|\z) 

注意,一旦你獲得結果,您可以通過內置函數(它通常不處理所有情況,但是現在您知道爲什麼:)自由檢查url的有效性。

+0

是的,但它會與url一起工作,我不知道如果URL是類似的東西:testone123.me 或類似的東西.. – user3352374 2014-09-06 20:23:52

+0

@ user3352374:可能,但沒有辦法知道是否「testone123.me 「是一個域名(以及一個URL)或一個簡單的文本元素。例如,如果構建一個模式來檢測:'\ b \ w + \。\ w +',則看起來像這樣的所有子字符串都會匹配,並且您將獲得錯誤的肯定結果。 (想象有人忘了一個點後的空格:「Bob有一隻貓,我有一隻狗。」 – 2014-09-06 20:33:59

+0

是的,但是你剛纔給我的代碼檢測到了一個Facebook網址或類似的東西嗎?test123呢。 me/fsifi8e3393?:O – user3352374 2014-09-06 20:39:19