我正在尝试查找所有锚标记并使用变量附加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)这样的东西
答案 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。