asp.net正则表达式找到锚标签并替换他们的网址

时间:2010-05-13 21:29:08

标签: .net asp.net regex

我正在尝试查找所有锚标记并使用变量附加href值。 例如

<a href="/page.aspx">link</a> will become <a href="/page.aspx?id=2">
<A hRef='http://www.google.com'><img src='pic.jpg'></a> will become <A hRef='http://www.google.com?id=2'><img src='pic.jpg'></a>

我能够使用正则表达式匹配所有锚标签和href值,然后我使用string.replace手动替换值,但是我不认为这是有效的方法。 有没有一个解决方案,我可以使用像regex.replace(html,newurlvalue)这样的东西

2 个答案:

答案 0 :(得分:3)

是的,你可以。标准警告适用 - 正则表达式不足以可靠地解析html。换句话说,它可能实际上对你最直接和最有效。受控制的例子,但有很多情况下会失败。

但是,如果您已经编写了正则表达式,则将其与HTML一起粘贴到Regex Hero,单击“替换”选项卡并键入替换字符串。

一旦您确认其有效,请点击工具&gt;生成.NET代码,您就可以得到答案。

更新:所以这是一个使用群组的不完美示例:

string strRegex = @"(?<=href="")(?<url>[^""]+)(?="")";
RegexOptions myRegexOptions = RegexOptions.IgnoreCase;
Regex myRegex = new Regex(strRegex, myRegexOptions);
string strTargetString = @"<a href=""/page.aspx"">link</a> will become <a href=""/page.aspx?id=2"">" + (char)10 + "<A hRef='http://www.google.com'><img src='pic.jpg'></a> will become <A hRef='http://www.google.com?id=2'><img src='pic.jpg'></a>";
string strReplace = "http://mysite.com${url}";

return myRegex.Replace(strTargetString, strReplace);

http://regexhero.net/tester/?id=e993fbf1-acb7-4f59-af87-94253a6e8221

(?<url>[^"]+)部分是一个命名组,可以在替换字符串中引用为${url}

更新#2:

所以要只匹配没有问号的网址,你可以这样做:

(?<=href=")(?![^"]*\?)(?<url>[^"]+)(?=")

(?![^"]*\?)部分是一个负面的前瞻,可以解决问题。

答案 1 :(得分:2)

如果您使用Regex解析HTML,标准建议是改为使用HMTL Agility Pack