2009-03-05 28 views
2

過去一天我一直在處理這個RegEx,我想我已經解決了它,以便它返回我想要的數據。首先有一點背景。根據Regex.Matches替換字符串中的內容MatchCollection

我有一個內容編輯器,用戶將能夠編輯網頁。他們可以格式化文本,添加鏈接等。標準內容編輯器的東西。當他們點擊保存時,編輯器提供獲取內容(editor.Content)並將其放入字符串的功能。我想要做的是獲得任何鏈接(<a>標籤),並找出它們是內部鏈接還是外部鏈接,以及它們是否爲PDF文件。

這裏是表達我已經出來:

<a\b[^<>]*href\s*=\s*[\""\'](?<domain>https?:\/\/[^\/\s\'\""]*)*\/?(?<path>\/?[^\s\""]+?)?[[>\""\'] 

有了這個,我能到域分離(如果有的話)和輸出路徑。然後,我遍歷匹配...

dim matchColl as MatchCollection = Regex.Matches(editorContent, regExString) 
For Each m as Match in matchColl 
    If m.Groups("domain").value <> myInternalDomain and m.Groups("domain").value <> "" then 
     'this is an external domain... do some stuff 
    End If 
    If m.Groups("path").value.EndsWith(".pdf") then 
     'it is a pdf, do some other stuff... 
    End if 
Next 

我的問題是這樣的......在我的部分「做一些東西」的價值觀,這將是最好的辦法讓回到我的' editorContent'字符串?我可能會把editorContent放入一個StringBuilder中,並對其進行一系列替換,但效率如何?

因此,例如,使用PDF,我想指定它在新窗口(target =「_ blank」)中打開,併爲外部URL添加一些javascript代碼到onclick屬性中。

任何想法都會很棒!

謝謝!

+1

... [這是與HTML匹配的正則表達式。](http://stackoverflow.com/a/1732454/5458362)... – Riker 2016-05-03 21:48:28

回答

3

我想你想做一個Regex.Replace並通過MatchEvaluator。基本上MatchEvaluator是返回替換字符串的函數的委託。

+0

完美的工作!我驚訝RegEx的強大功能......這真是太棒了! – hacker 2009-03-05 20:11:27