在html中需要将url替换为标记
仅限http://google3.com:1139和http://google6.com:1139
<div>
<a href="http://google1.com:1139" target="_blank">http://google2.com:1139</a>
http://google3.com:1139
</div>
<div>
<a href="http://google4.com:1139" target="_blank">http://google5.com:1139</a>
http://google6.com:1139
</div>
必须
<div>
<a href="http://google1.com:1139" target="_blank">http://google2.com:1139</a>
<a href="http://google3.com:1139" target="_blank">http://google3.com:1139</a>
</div>
<div>
<a href="http://google4.com:1139" target="_blank">http://google5.com:1139</a>
<a href="http://google6.com:1139" target="_blank">http://google6.com:1139</a>
</div>
var result = Regex.Replace("<div><a href=\"http://google1.com:1139\" target=\"_blank\">http://google2.com:1139</a>http://google3.com:1139</div><div><a href=\"http://google4.com:1139\" target=\"_blank\">http://google5.com:1139</a>http://google6.com:1139</div>",
@"((?<!href=['""]?)(http|ftp|https):\/\/[\w\-_]+(\.[\w\-_]+)+([\w\-\.,@?^=%&:/~\+#]*[\w\-\@?^=%&/~\+#])?)",
"<a target='_blank' href='$1'>$1</a>");
但需要替换
以 http 开头,但现在 href =“http (找到)
未以
</a>
<a ... </a>
答案 0 :(得分:1)
我认为这些要求可以改写如下:
<a
和</a>
之间的所有内容都应保持不变(包括href
属性值)<a
和</a>
之外的给定模式的任何网址都应包含在锚标记中。这可以通过搜索两种模式<a.*?</a>
和&lt;某些网址&gt;作为替代方案来实现。如果找到第一个模式,则自行替换匹配,如果找到第二个模式,则用包装的URL替换:
Regex.Replace(html,
@"<a.*?</a>|(?:https?|ftp)://[\w_.-]+:\d+",
m => m.Value.StartsWith("<")
? m.Value
: string.Format("<a target='_blank' href='{0}'>{0}</a>", m.Value));
P.S。
为简洁起见,我简化了URL正则表达式。实际应用可能需要更多扩展模式。