2011-03-10 17 views
0

我想輸出一個字符串作爲其中的鏈接的HTML。我想讓這些鏈接成爲實際的鏈接。 我的測試字符串= 「https://www.google.com http://yahoo.com www.msn.com www.google.com」 我的代碼:正則表達式來查找文本中的URL,並將它們作爲鏈接

Dim oRegEx As New Regex("((https?:\/\/|www\.)([-\w\.]+)+(:\d+)?(\/([\w\/_\.]*(\?\S+)?)?)?)", RegexOptions.IgnoreCase) 
Dim matches As MatchCollection = oRegEx.Matches(sTextToConvert) 

For Each match As Match In matches 
    If (match.Value.StartsWith("www.")) Then 

     sTextToConvert = sTextToConvert.Replace(match.Value, "<a href='http://" & match.Value & "' target=""_blank"">" & match.Value & "</a>") 
    Else 
     sTextToConvert = sTextToConvert.Replace(match.Value, "<a href='" & match.Value & "' target=""_blank"">" & match.Value & "</a>") 
    End If 
Next 

Return sTextToConvert 

我這裏有問題,因爲www.google.com是在串兩次,當我做替換它取代我已經替換字符串「https://www.google.com的一部分。

下面是我得到的替代

<a href='https://<a href='http://www.google.com' target="_blank">www.google.com</a>' target="_blank">https://<a href='http://www.google.com' target="_blank">www.google.com</a></a> <a href='http://yahoo.com' target="_blank">http://yahoo.com</a> <a href='http://www.msn.com' target="_blank">www.msn.com</a> <a href='http://www.google.com' target="_blank">www.google.com</a> 
+0

Brad,This is off topic。你如何編輯我的文章?我試圖自己格式化,但沒有爲我工作/ – Mithil 2011-03-10 14:45:52

+0

這是什麼語言? – robert 2011-03-10 15:02:01

回答

1

發現一個殺手魂靈

我只是使用它,它會照顧所有的鏈接。返回Regex.Replace(sTextToConvert,「((https?:\/\/| www。)([ - \ w。] +)+(:\ d +)?(\ /([\ w \ _。] *(\?\ S +)?)?)?)「,」$ 0「)

0

Matches後僅用於檢索字符串的部分

改爲使用Replace。它需要的參數之一是將匹配的字符串轉換爲替換字符串的函數(請參閱此處的示例)。

1

這不是一件小事!

事實上,這個網站的霸主在這個主題上寫了一篇博客文章。請參閱:The Problem With URLs。 (但要得到這個問題的要點和範圍,你真的需要閱讀整個註釋線程。)這是我做那裏(太晚了),這是這裏適用的評論:

我一直在努力工作在這個(有趣和具有挑戰性的)問題,並提出了一個相當不錯的單一正則表達式解決方案(PHP和Javascript)。它可以正確處理:分隔的URL(在括號中),[方括號],<尖括號>,{大括號},'單引號'和'雙引號')跳過已經鏈接的URL(以HTML和BBCode語法),適當地排除了尾隨標點符號(即使與引號混合在一起),並且使用沒有複雜的正則表達式構造(即沒有向後看,所以它在Javascript中工作)。它也正確處理HTML實體形式的分隔符。

我已經發布了Javascript和PHP腳本作爲開源代碼,任何有興趣的人都可以從Github上下載它們:「LinkifyURL」。這裏是給Javascript測試頁面的鏈接,演示了JavaScript的版本,並提供了兩個腳本中使用正則表達式的詳細註釋上市: URL Linkification (HTTP/FTP)

的正則表達式是相當複雜(但這樣是這個問題,因爲它原來)。如果你願意的話,RegexBuddy庫文件將作爲Github項目的一部分。

也看看約翰格魯伯的:An Improved Liberal, Accurate Regex Pattern for Matching URLs。他的正則表達式相當不錯(但在某些條件下它確實遭受了災難性的回溯 - 即當url具有嵌套括號並且內部括號爲空時)。

相關問題