----------------------------正则表达式高手 ---------> 请

heywap 2009-04-28 10:03:04
我有类似下面的字符串

<img width="100" height="200" alt="" src="/img1.gif" /> 符合
<img width="100" height="200" alt="" src="/img1.gif"> 符合
<img width="100" height="200" alt="" src="c:\img1.gif">
<img width="100" height="200" alt="" src="c:\img1.gif" />
<img width="100" height="200" alt="" src="f:\img1.gif">
<img width="100" height="200" alt="" src="http://www.g.cn/img1.gif" />
<img width="100" height="200" alt="" src="http://www.g.cn/img1.gif">
<img width="100" height="200" alt="" src="img1.aspx?id=img1" /> 符合
<img width="100" height="200" alt="" src="img1.aspx?id=img1"> 符合
<img width="100" height="200" alt="" src=/img1.gif /> 符合

我想要匹配出非绝对路径的src属性值。也就是想排除掉下列这些情况

src="file://abc.gif"
src="c:/abc.gif"
src="d:/abc.gif"
src="http://www.sohu.com/abc.gif"

至于图片的扩展名是任意都可以。

请大家帮忙。
...全文
177 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
编程有钱人了 2009-04-28
  • 打赏
  • 举报
回复

MatchCollection mc = Regex.Matches(this.TextBox1.Text, @"<img.*?src=""(
  • *
  • [^:]*)""*>", RegexOptions.IgnoreCase);
    foreach (Match m in mc)
    {
    Response.Write(m.Value + "<br/>");
    }
    Response.End();

自己测试下 我在本地测试没问题
himoggy 2009-04-28
  • 打赏
  • 举报
回复
。。。参考过滤掉“:”
keystudio 2009-04-28
  • 打赏
  • 举报
回复

"(?<=<img[^>]*?src=)([""']?)[^>""':\s]+\1(?=[\s\b>])"

//测一下
feifeiyiwen 2009-04-28
  • 打赏
  • 举报
回复
谢了,学习来
wackyboy 2009-04-28
  • 打赏
  • 举报
回复

Regex.Replace(input,@"(?i)(?<=<img\b.*?)src=.*?:[^""'\s>]+[""']?","");

wackyboy 2009-04-28
  • 打赏
  • 举报
回复

Regex.Replace(input,@"(?i)(?<=<img\b.*?)src=.*?:[^"'\s>]+["']?","");
蓝海D鱼 2009-04-28
  • 打赏
  • 举报
回复
终结版

(?<=img.*?src=")[^:]+?(?=".*?[\r\n])|(?<=img.*?src=)(/[^:]*?)(?=/>)
蓝海D鱼 2009-04-28
  • 打赏
  • 举报
回复
精简版

(?<=img.*?src=")([^:]*?)(?=".*?[\r\n])|(?<=img.*?src=)(/[^:]*?)(?=/>)
编程有钱人了 2009-04-28
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 heywap 的回复:]
TO:wangjun8868

结果任何项都可以匹配。。
[/Quote]

MatchCollection mc = Regex.Matches(this.TextBox1.Text, @"<img.*?src=""(
  • *
  • [^:]*)""*>", RegexOptions.IgnoreCase);
    foreach (Match m in mc)
    {
    if (m.Success)
    {
    Response.Write(m.Value + "<br/>");
    }

    }

    Response.End();


不好意思忘加判断了

只是带 引号 目前无法解决
蓝海D鱼 2009-04-28
  • 打赏
  • 举报
回复
我有一个都可以 满足

(?<=img.*?src=")[\w\W][^:]*?(?=".*?[\r\n])|(?<=img.*?src=)/[\w\W][^:]*?(?=/>)
wszhoho 2009-04-28
  • 打赏
  • 举报
回复
那这样吧:
<img.*?src=(?<src>[^:]*?|"[^:]*?"|'[^:]*?')/{0,1}>
heywap 2009-04-28
  • 打赏
  • 举报
回复
感谢大伙的帮助。

TO:HDNGO
字符串太长,indexOf效率太差。

TO:wszhoho
似乎只考虑到有""号情况,实际情况是可能是单引号或没有引号。
wszhoho 2009-04-28
  • 打赏
  • 举报
回复
<img.*?src="[^:]*">
HDNGO 2009-04-28
  • 打赏
  • 举报
回复
简单一点,indexOf一下,有“:”的就不合适。。。。
中年秃头大叔 2009-04-28
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 wangjun8868 的回复:]
C# code
MatchCollection mc = Regex.Matches(this.TextBox1.Text, @"<img.*?src=""(
  • *
  • [^:]*)""*>", RegexOptions.IgnoreCase);
    foreach (Match m in mc)
    {
    Response.Write(m.Value + "<br/>");
    }
    Response.End();



    自己测试下 我在本地测试没问题
    [/Quote]
    up
heywap 2009-04-28
  • 打赏
  • 举报
回复
TO:wangjun8868

我仔细测试了您给出的代码,使用以下html做为测试字符串。

<img width="100" height="200" alt="" src="/img1.gif" />
<img width="100" height="200" alt="" src="/img1.gif">
<img width="100" height="200" alt="" src="c:\img1.gif">
<img width="100" height="200" alt="" src="c:\img1.gif" />
<img width="100" height="200" alt="" src="f:\img1.gif">
<img width="100" height="200" alt="" src="http://www.g.cn/img1.gif" />
<img width="100" height="200" alt="" src="http://www.g.cn/img1.gif">
<img width="100" height="200" alt="" src="img1.aspx?id=img1" />
<img width="100" height="200" alt="" src="img1.aspx?id=img1">
<img width="100" height="200" alt="" src=/img1.gif />

结果任何项都可以匹配。。


62,267

社区成员

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

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

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

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