我这个正则表达式问题

popotans 2010-10-25 06:10:07
功能是替换html中的 图片地址,转换为绝对连接:代码如下
       /// <summary>
/// 获取html代码中的图片,并修改图片地址为绝对链接
/// </summary>
/// <param name="imghtml">原来的html代码</param>
/// <param name="httpurl">要添加的网址头, 请在连接后加上斜杠如:http;//www.a.com/</param>
/// <returns>返回新的html代码</returns>
public static string ChangeImgSrc2(string imghtml, string httpurl)
{

if (string.IsNullOrEmpty(imghtml)) return "";
string pattern1 = @"<img.+?>";
string pattern = @"(<img\b[^<>]*?\bsrc[\s\t\r\n]*=[\s\t\r\n]*[""']?[\s\t\r\n]*)(?<imgUrl>[^\s\t\r\n""'<>]*)[^<>]*?/?[\s\t\r\n]*>";//填空
//pattern = @"<img\b[^<>]*?\bsrc[\s\t\r\n]*=[\s\t\r\n]*[""']?[\s\t\r\n]*(?<imgUrl>[^\s\t\r\n""'<>]*)[^<>]*?/?[\s\t\r\n]*>";
Regex reg = new Regex(pattern, RegexOptions.IgnoreCase);
Regex reg1 = new Regex(pattern1, RegexOptions.IgnoreCase);
MatchCollection mc = reg1.Matches(imghtml);//找到所有IMG
foreach (Match m in mc)//替换每一个img的地址
{
string img = m.Value;
string imgurl = reg.Replace(img, "$2");//取得图片地址
string pattern2 = @"^http([\s\S])*";
if (!Regex.IsMatch(imgurl, pattern2, RegexOptions.IgnoreCase))//判断图片地址是否包含http
{
if (!imgurl.StartsWith("/"))
{
imgurl = "/" + imgurl;
}
string imgurlnew = imgurl.Replace(imgurl, httpurl + imgurl);//把地址变位绝对链接
// HttpContext.Current.Response.Write(imgurlnew + "<br>");
imghtml = imghtml.Replace(imgurl, imgurlnew);//替换全部html代码,把图片地址变为绝对地址
}
}
return imghtml;
}


有的图片可以抓取出来 有的 就不可以 我 好 纳闷啊 谁能 给我 改正下啊 谢谢谢谢谢;啊
<img height="481" alt="《正午的阳光》唐跃 油画" width="500" src="/uploadfiles/images/admin/FCKeditor/2010102510334316.jpg" /> 这个 可以匹配,

<img height="352" alt="珠海市美术家协会主席古锦其先生致辞
" src="/uploadfiles/images/admin/FCKeditor/201010251028016.jpg" width="500" /> 这个 就不能匹配 ?怎么办啊 ?
...全文
106 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
popotans 2010-10-26
  • 打赏
  • 举报
回复
我 不会 啊 见笑了
-过客- 2010-10-25
  • 打赏
  • 举报
回复
正则居然被你这样用。。。

//替换方法
public static string ChangeImgSrc2(string imghtml, string httpurl)
{
return Regex.Replace(imghtml, @"(?i)(?<=<img[^>]*?src="")(?!http://)", httpurl);
}
//调用
string test = @"有的图片可以抓取出来 有的 就不可以 我 好 纳闷啊 谁能 给我 改正下啊 谢谢谢谢谢;啊
<img height=""481"" alt=""《正午的阳光》唐跃 油画"" width=""500"" src=""/uploadfiles/images/admin/FCKeditor/2010102510334316.jpg"" /> 这个 可以匹配,

<img height=""352"" alt=""珠海市美术家协会主席古锦其先生致辞
"" src=""/uploadfiles/images/admin/FCKeditor/201010251028016.jpg"" width=""500"" /> 这个 就不能匹配 ?怎么办啊 ?";
richTextBox2.Text = ChangeImgSrc2(test, "http://www.csdn.net");
/*---------输出--------
有的图片可以抓取出来 有的 就不可以 我 好 纳闷啊 谁能 给我 改正下啊 谢谢谢谢谢;啊
<img height="481" alt="《正午的阳光》唐跃 油画" width="500" src="http://www.csdn.net/uploadfiles/images/admin/FCKeditor/2010102510334316.jpg" /> 这个 可以匹配,

<img height="352" alt="珠海市美术家协会主席古锦其先生致辞
" src="http://www.csdn.net/uploadfiles/images/admin/FCKeditor/201010251028016.jpg" width="500" /> 这个 就不能匹配 ?怎么办啊 ?
*/
wuyq11 2010-10-25
  • 打赏
  • 举报
回复
string test = "";
Regex reg = new Regex(@"(?is)(?<=<img\s+src=(['""]?))(?!http://)(?=[^'""\s>]+\1)");
string result = reg.Replace(test, "");
qqzeng-ip 2010-10-25
  • 打赏
  • 举报
回复
 string regImage = "<img\\b[^>]*\\bsrc\\s*=\\s*('|\")(?<url>([^'\"\n\r\f>]+(\\.jpg|\\.bmp|\\.gif|\\.png|\\.tif|\\.jpe|\\.jpeg|\\.ico|)))('|\")[^>]*>";

Regex reg = new Regex(regImage, RegexOptions.Compiled | RegexOptions.IgnoreCase);

Match m = reg.Match(content);
while (m.Success)
{
string value = m.Groups["url"].Value;

}

62,272

社区成员

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

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

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

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