尝试获取与网址匹配的正则表达式,例如'http://www.test.com',然后围绕它放置锚标签 - 该部分已经在以下工作:
regex = @"(?:(?:https?|ftp|file):\/\/|www\.|ftp\.)(?:\([-A-Z0-9+&@#\/%=~_|$?!:;,.]*\)|[-A-Z0-9+&@#\/%=~_|$?!:;,.])*(?:\([-A-Z0-9+&@#\/%=~_|$?!:;,.]*\)|[A-Z0-9+&@#\/%=~_|$])"
msg = r.Replace( msg, "<a target=\"_blank\" href=\"$0\">$0</a>" );
但是当输入文本中有图像标签时,它会错误地将锚标签放在图像标签的src属性中,例如。
<img src="<a>...</a>" />;
到目前为止,我试图绕过它:(不工作)
regex = @"(?!(src=""))(?:(?:https?|ftp|file):\/\/|www\.|ftp\.)(?:\([-A-Z0-9+&@#\/%=~_|$?!:;,.]*\)|[-A-Z0-9+&@#\/%=~_|$?!:;,.])*(?:\([-A-Z0-9+&@#\/%=~_|$?!:;,.]*\)|[A-Z0-9+&@#\/%=~_|$])"
编辑:
(示例测试输入):
<p>
www.test1.com<br />
<br />
http://www.test2.com<br />
<br />
https://www.test3.com<br />
<br />
"https://www.test4.com<br />
<br />
'https://www.test4.com<br />
<br />
="https://www.test4.com</p>
<p>
</p>
<p>
<img alt="" src="..." style="width: 500px; height: 375px;" /></p>
(示例输出):
<p>
<a target="_blank" href="www.test1.com">www.test1.com</a><br />
<br />
<a target="_blank" href="http://www.test2.com">http://www.test2.com</a><br />
<br />
<a target="_blank" href="https://www.test3.com">https://www.test3.com</a><br />
<br />
"<a target="_blank" href="https://www.test4.com">https://www.test4.com</a><br />
<br />
'<a target="_blank" href="https://www.test4.com">https://www.test4.com</a><br />
<br />
="<a target="_blank" href="https://www.test4.com">https://www.test4.com</a></p>
<p>
</p>
<p>
<img alt="" src="<a target="_blank" href="...">...</a>" style="width: 500px; height: 375px;" /></p>
(期望的输出):
<p>
<a target="_blank" href="www.test1.com">www.test1.com</a><br />
<br />
<a target="_blank" href="http://www.test2.com">http://www.test2.com</a><br />
<br />
<a target="_blank" href="https://www.test3.com">https://www.test3.com</a><br />
<br />
"<a target="_blank" href="https://www.test4.com">https://www.test4.com</a><br />
<br />
'<a target="_blank" href="https://www.test4.com">https://www.test4.com</a><br />
<br />
="<a target="_blank" href="https://www.test4.com">https://www.test4.com</a></p>
<p>
</p>
<p>
<img alt="" src="..." style="width: 500px; height: 375px;" /></p>
答案 0 :(得分:1)
使用正则表达式处理HTML在我的意见中是错误的。
将它放在一边 - 只需在正则表达式匹配成功后添加该规则:
if(regexResult.Count(c =&gt; c =='/')&gt; 2)regexResult有两个以上的'/'字符 这是无效的结果;
如果它可以解决您的问题,可以将此规则添加到正则表达式模式中。
答案 1 :(得分:0)
以下是为我解决问题的正则表达式:
String regex = @"(?<!(""|'))((http|https|ftp|file):\/\/|www\.|ftp\.)(?:\([-A-Z0-9+&@#\/%=~_|$?!:;,.]*\)|[-A-Z0-9+&@#\/%=~_|$?!:;,.])*(?:\([-A-Z0-9+&@#\/%=~_|$?!:;,.]*\)|[A-Z0-9+&@#\/%=~_|$])";
我使用了一个回顾否定断言来确保url之前没有开头的引用