替换基于Regex.Matches MatchCollection的字符串中的内容

时间:2009-03-05 17:51:55

标签: .net vb.net regex string replace

我在过去的一天左右一直在研究这个RegEx,我想我已经解决了它,以便它返回我想要的数据。首先是一点背景。

我有一个内容编辑器,用户可以编辑网页。他们可以格式化文本,添加链接等。标准内容编辑器的东西。当他们单击“保存”时,编辑器提供获取内容(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

我的问题是......我对值进行了一些操作的部分,将这个部分放回到'ed​​itorContent'字符串中的最佳方法是什么?我可以把editorContent放到一个StringBuilder中并对它进行一大堆替换,但这样效率非常高吗?

因此,例如,对于PDF,我想指定它在新窗口中打开(target =“_ blank”),对于外部URL,将一些javascript代码添加到onclick属性中。

任何想法都会很棒!

谢谢!

1 个答案:

答案 0 :(得分:3)

我认为您想要Regex.Replace并传递MatchEvaluator。基本上MatchEvaluator是一个返回替换字符串的函数的委托。