我需要一个正则表达式来对抗下面的字符串,它会在某些条件下将绝对路径转换为相对路径。
<p>This website is <strong>really great</strong> and people love it <img alt="" src="http://localhost:1379/Content/js/fckeditor/editor/images/smiley/msn/teeth_smile.gif" /></p>
规则:
如果网址包含“/ Content /”我 想得到相对路径
如果网址不包含 “/ Content /”,它是一个外部文件, 并且绝对路径应该保持
Regex unfortunatley不是我的强项,而且这对我来说太先进了。如果有人能提供一些技巧我会很感激。
提前致谢。
更新 要回答评论中的问题:
答案 0 :(得分:5)
您应该考虑使用Uri.MakeRelativeUri method - 您当前的算法取决于路径中永远不会包含“/ Content /”的外部文件,这对我来说似乎有风险。 MakeRelativeUri将确定是否可以从当前Uri到src
或href
建立相对路径,无论您或外部文件存储在路上发生什么变化。
答案 1 :(得分:2)
除非我在这里忽略了这一点,否则如果你更换
^(.*)([C|c]ontent.*)
使用
/$2
你最终会得到
/Content/js/fckeditor/editor/images/smiley/msn/teeth_smile.gif
这只会发现id“content”,所以在cae中你有一个URL,如:
http://localhost:1379/js/fckeditor/editor/images/smiley/msn/teeth_smile.gif
什么都不会被取代
希望它有所帮助,而且我没有错过任何东西。
<强>更新强>
显然考虑到你正在使用HTML解析器来查找a href中的URL(如果你不是这样的话,你应该这样做: - )
干杯
答案 2 :(得分:0)
那是perl,我不知道c#:
s@(<(img|a)\s[^>]*?\s(src|href)=)(["'])http://[^'"]*?(/Content/[^'"]*?)\4@$1$4$5@g
如果c#具有类似perl的正则表达式,则很容易移植。
答案 3 :(得分:0)
此函数可以将HTML中的所有超链接和图像源转换为绝对URL,并且您也可以轻松地将其修改为CSS文件和Javascript文件:
Private Function ConvertALLrelativeLinksToAbsoluteUri(ByVal html As String, ByVal PageURL As String)
Dim result As String = Nothing
' Getting all Href
Dim opt As New RegexOptions
Dim XpHref As New Regex("(href="".*?"")", RegexOptions.IgnoreCase)
Dim i As Integer
Dim NewSTR As String = html
For i = 0 To XpHref.Matches(html).Count - 1
Application.DoEvents()
Dim Oldurl As String = Nothing
Dim OldHREF As String = Nothing
Dim MainURL As New Uri(PageURL)
OldHREF = XpHref.Matches(html).Item(i).Value
Oldurl = OldHREF.Replace("href=", "").Replace("HREF=", "").Replace("""", "")
Dim NEWURL As New Uri(MainURL, Oldurl)
Dim NewHREF As String = "href=""" & NEWURL.AbsoluteUri & """"
NewSTR = NewSTR.Replace(OldHREF, NewHREF)
Next
html = NewSTR
Dim XpSRC As New Regex("(src="".*?"")", RegexOptions.IgnoreCase)
For i = 0 To XpSRC.Matches(html).Count - 1
Application.DoEvents()
Dim Oldurl As String = Nothing
Dim OldHREF As String = Nothing
Dim MainURL As New Uri(PageURL)
OldHREF = XpSRC.Matches(html).Item(i).Value
Oldurl = OldHREF.Replace("src=", "").Replace("src=", "").Replace("""", "")
Dim NEWURL As New Uri(MainURL, Oldurl)
Dim NewHREF As String = "src=""" & NEWURL.AbsoluteUri & """"
NewSTR = NewSTR.Replace(OldHREF, NewHREF)
Next
Return NewSTR
End Function