网址的正则表达式替换

masterlijianfei 2012-10-18 11:40:35
原网址:href="/Product/List-0039,0084.shtml"

转换为目标网址:href="http://abc.sina.com.cn/Product/List-0039,0084.shtml"

求解!也就是说要把网页内部的所有网址,没有带上域名的,全部要在里面加上域名进行访问。
...全文
225 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
masterlijianfei 2012-10-19
  • 打赏
  • 举报
回复
十分感谢q107770540,搞定!
q107770540 2012-10-19
  • 打赏
  • 举报
回复
正则没问题,你我自己使用的问题
你代码里的双引号转义了么?

Regex reg = new Regex(@"(?i)href=(['"]?)(?=(?!https?://)[^'"\s]+\.(?:shtml|css|js|aspx)\1)");
==============
Regex reg = new Regex(@"(?i)href=(['""]?)(?=(?!https?://)[^'""\s]+\.(?:shtml|css|js|aspx)\1)");



source = reg.Replace(source, @"http://abc.sina.com.cn$0");
========
source = reg.Replace(source, @"$0http://abc.sina.com.cn");

最终正确代码:



Regex reg = new Regex(@"(?i)href=(['""]?)(?=(?!https?://)[^'""\s]+\.(?:shtml|css|js|aspx)\1)");
source = reg.Replace(source, @"$0http://abc.sina.com.cn");


masterlijianfei 2012-10-19
  • 打赏
  • 举报
回复
要求:对于扩展名为.css .js .aspx .shtml的网址,替换成域名+原来的网址,而.html的扩展名网址不需要替换

string source = "<link href=\"/Templates/Purple3D/VI.css\" rel=\"stylesheet\" type=\"text/css\" /><li onclick=\"GoToPages(this)\"><a href=\"/U/love400/Articles/maidanglao_1.shtml\" title=\"麦当劳 4008-517-517\">maidangnao</a><a href=\"/U/love400/Articles/maidanglao_1.html\" title=\"麦当劳 4008-517-517\"><img src=\"http://w40.myzcm.com/2012/08/flyon/maidanglao.gif\" /></a><a href=\"/U/love400/Articles/maidanglao_1.html\" title=\"麦当劳 4008-517-517\">麦当劳 4008-517-517</a></li>";
Regex reg = new Regex(@"(?i)href=(['"]?)(?=(?!https?://)[^'"\s]+\.(?:shtml|css|js|aspx)\1)");
source = reg.Replace(source, @"http://abc.sina.com.cn$0");

不知道正则表达式怎么处理
q107770540 2012-10-19
  • 打赏
  • 举报
回复
哪里不行了,你的代码怎么写的
masterlijianfei 2012-10-19
  • 打赏
  • 举报
回复
To:q107770540

你的正则表达式不行哦
q107770540 2012-10-19
  • 打赏
  • 举报
回复
(?i)href=(['"]?)(?=(?!https?://)[^'"\s]+(?<!\.html)\1)

or:

(?i)href=(['"]?)(?=(?!https?://)[^'"\s]+\.(?:shtml|css|js|aspx)\1)
q107770540 2012-10-19
  • 打赏
  • 举报
回复
囧。。

yourhtml=Regex.Replace(yourhtml,@"(?i)href=(['""]?)(?=(?!https?://)[^'""s]+\1)"),"$0http://abc.sina.com.cn");
masterlijianfei 2012-10-19
  • 打赏
  • 举报
回复
如果只限制某些扩展名才进行替换,怎么处理呢?
.shtml字符串结尾,.css字符串结尾,.js字符串结尾,aspx字符串结尾,只有这些扩展名才加上域名前缀,而.html扩展名不需要加上域名前缀
q107770540 2012-10-19
  • 打赏
  • 举报
回复
[Quote=引用楼主 的回复:]
原网址:href="/Product/List-0039,0084.shtml"

转换为目标网址:href="http://abc.sina.com.cn/Product/List-0039,0084.shtml"

求解!也就是说要把网页内部的所有网址,没有带上域名的,全部要在里面加上域名进行访问。
[/Quote]

这哪需要正则?

yourhtml=yourhtml.Replace("href=\"","href=\"http://abc.sina.com.cn");
wangyizhi58 2012-10-19
  • 打赏
  • 举报
回复
string href= @"href=""/Product/List-0039,0084.shtml""";
Regex reg = new Regex(@"(?is)(?<=href="")/[^""]+(?="")");
if(!reg.match(href))
{
href =HttpContext.Current.Request.Url.Host + href;
}
bdmh 2012-10-19
  • 打赏
  • 举报
回复

string source = @"href=""/Product/List-0039,0084.shtml""";
Regex reg = new Regex(@"(?is)(?<=href="")/[^""]+(?="")");
source = reg.Replace(source, @"http://abc.sina.com.cn$0");
MessageBox.Show(source);
masterlijianfei 2012-10-19
  • 打赏
  • 举报
回复
非常感谢,正确!
q107770540 2012-10-19
  • 打赏
  • 举报
回复
Regex reg = new Regex(@"(?i)href=(['""]?)(?=(?!https?://)[^'""\s]+\.(?:shtml|css|js|aspx)[^'""\s]*\1)");
masterlijianfei 2012-10-19
  • 打赏
  • 举报
回复

假如超链接里面有参数,如/product/list.aspx?type=2 ,你提供的正则表达式就替换不了了,请问该如何调整呢

62,041

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧