0

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

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

进入 html 链接进入段落:

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

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

如何以短的方式做到这一点?可以使用 regex.Replace() 方法来完成吗?

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

4

2 回答 2

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

于 2012-09-21T15:31:21.240 回答
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.

于 2012-09-22T07:58:36.630 回答