我在过去的一天左右一直在研究这个RegEx,我想我已经把它弄清楚了,这样它就能返回我想要的数据。首先是一些背景知识。
我有一个内容编辑器,用户将能够编辑网页。它们可以格式化文本,添加链接等。标准工具集编辑器的东西。当他们单击save时,编辑器提供了获取内容(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属性中。
任何想法都会很棒!
谢谢!
发布于 2009-03-05 17:55:18
我认为您想要做一个Regex.Replace
并传入一个MatchEvaluator
。基本上,MatchEvaluator
是一个返回替换字符串的函数的委托。
https://stackoverflow.com/questions/615835
复制相似问题