如何使用正则表达式将段落中的原始URL替换为html链接

时间:2012-09-21 14:52:49

标签: c# regex

如何更改段落中的绝对网址:

<p>http://www.google.com</p>

进入html链接进入段落:

<p><a href=\"http://www.google.com\">http://www.google.com</a></p>

Thare可以是很多段落。我希望正则表达式从这个url中删除通用<p>url<p>值,并将其放入模板中,如下所示:<p><a href=\"url\">url</a></p>

如何在短期内完成?可以使用regex.Replace()方法吗?

顺便说一句:用于绝对网址匹配的正则表达式可以是这样的:^(ht|f)tp(s?)\:\/\/[0-9a-zA-Z]([-.\w]*[0-9a-zA-Z])*(:(0-9)*)*(\/?)([a-zA-Z0-9\-\.\?\,\'\/\\\+&amp;%\$#_]*)?$(取自msdn

2 个答案:

答案 0 :(得分:0)

形成你的正则表达式:删除第一个^和最后一个$ - 它意味着“从头到尾匹配整个输入字符串”

string regexPattern = @"(ht|f)tp(s?)\:\/\/[0-9a-zA-Z]([-.\w]*[0-9a-zA-Z])*(:(0-9)*)*(\/?)([a-zA-Z0-9\-\.\?\,\'\/\\\+&amp;%\$#_]*)?";

string input = @"<p>http://www.google.com</p>";

var reg = new Regex(regexPattern, RegexOptions.IgnoreCase);

// $0 - substitution, refers to  the text matched by the whole pattern    
var output = reg.Replace(input, "<a href=\"$0\">$0</a>");

有关替换的更多信息http://msdn.microsoft.com/en-us/library/ewy2t5e0.aspx

答案 1 :(得分:0)

尝试使用此正则表达式:

(?<!\")(ht|f)tp(s?)\:\/\/[0-9a-zA-Z]([-.\w]*[0-9a-zA-Z])*(:(0-9)*)*(\/?)([a-zA-Z0-9\-\.\?\,\'\/\\\+&amp;%\$#_]*)?(?!\")

避免匹配<a href="http://www.google.com">之类的字符串(由"括起来)。

示例代码:

var inputString = @"<p>http://www.google.com</p><p><a href=\"http://www.google.com\">my web link</a></p>";
var pattern = @"(?<url>(?<!\")(ht|f)tp(s?)\:\/\/[0-9a-zA-Z]([-.\w]*[0-9a-zA-Z])*(:(0-9)*)*(\/?)([a-zA-Z0-9\-\.\?\,\'\/\\\+&amp;%\$#_]*)?(?!\"))";
var result = Regex.Replace(strInput, pattern, "<a href=\"${url}\">${url}</a>");

解释

(?<!subexpression) Zero-width negative lookbehind assertion.

(?!subexpression) Zero-width negative lookahead assertion.

(?<name>subexpression) Captures the matched subexpression into a named group.