@"(?is)(?:<img[^>]*?src=|\bbackground(?:=|:url\())(?:(['""])(?<img>[^'"">)]+)\1|(?<img>[^'""\s)>]+))"这个正则是取页面中所有的img和background的图片地址,但是却不能取到有符号的图片地址,比如带()的,该如何修改?

解决方案 »

  1.   

    @"(?is)(?:<img[^>]*?src=|\bbackground(?:=|:url\())(?:(['""])(?<img>[*]+)\1|(?<img>[*]+))"
      

  2.   

    @"(?is)(?:<img[^>]*?src=|\bbackground(?:=|:url\())(?:(['""])(?<img>[.]+)\1|(?<img>[.]+))"
      

  3.   

    楼上还是不能识别到啊
    <img alt="" src="http://d8.jetphoto.cn/home/d1_ff58bac9/album/ZT_080904092545.data/size_2/02(1).jpg" width="500" height="500">
      

  4.   

    给出所有可能情况的例子Regex reg = new Regex(@"(?is)<img[^>]*?(?:(?:src|\bbackground)=(['""]?)(?<img>[^'""\s>]*)\1|\bbackground:url\((?<img>[^()]*)\))");
    MatchCollection mc = reg.Matches(yourStr);
    foreach (Match m in mc)
    {
        richTextBox2.Text += m.Groups["img"].Value + "\n";
    }
      

  5.   

                string str = @"<img alt="""" src=""http://d8.jetphoto.cn/home/d1_ff58bac9/album/ZT_080904092545.data/size_2/02(1).jpg"" width=""500"" height=""500"">";            Regex reg = new Regex(@"((?<=img[^<>]*src="").*?(?=""))");            foreach (Match m in reg.Matches(str))
                    Console.WriteLine(m.Value);能给个backgroud的例子么
      

  6.   

    Regex reg = new Regex(@"((?<=img[^<>]*src="").*?(?=""))|((?<=background[^<>]*src="").*?(?=""))");
      

  7.   

    过客兄,<table border="0" cellspacing="0" cellpadding="0" width="710" background="http://d8.jetphoto.cn/home/d1_ff58bac9/album/mercury_080724212904.data/size_full/pro_09.jpg" align="center">你写的括号是能转了,这个又失效了,之前也是你帮我写的,需要可以识别带中文,带符号的图片地址,src、background=、background(url:****)这种的
      

  8.   


                string str = @"<table border=""0"" cellspacing=""0"" cellpadding=""0"" width=""710"" background=""http://d8.jetphoto.cn/home/d1_ff58bac9/album/mercury_080724212904.data/size_full/pro_09.jpg"" align=""center"">";            Regex reg = new Regex(@"((?<=img[^<>]*src="").*?(?=""))|((?<=background="").*?(?=""))");            foreach (Match m in reg.Matches(str))
                    Console.WriteLine(m.Value);
      

  9.   

    写错了是style="background:url(http://d8.jetphoto.cn/home/d1_ff58bac9/album/mercury_080724212904.data/size_full/pro_09.jpg)",之前的都可以
      

  10.   

    CSDN流传一句话
    有正则的地方就有过客果然
      

  11.   

    看了第一眼感觉像是我写的,不过回答的问题太多,你的规则记不清了,试下这个Regex reg = new Regex(@"(?is)(?:<img[^>]*?src|\bbackground)=(['""]?)(?<img>[^'""\s>]*)\1|\bbackground:url\((?<img>[^()]*)\)");
    MatchCollection mc = reg.Matches(yourStr);
    foreach (Match m in mc)
    {
        richTextBox2.Text += m.Groups["img"].Value + "\n";
    }
      

  12.   

    <img src=http://w5.myzcm.com/2007/12/guest/在 工(中)国有.jpg>这个无法转换了
      

  13.   

    加上双引号也转不了<img src="http://w5.myzcm.com/2007/12/guest/在 工(中)国有.jpg">
      

  14.   


    这种本身就是错误的,你不可能要求去适配这种格式对于这种,你也要考虑一下,是否真的有必要去考虑,实际应用中一般是不会允许出现空格的
    <img src="http://w5.myzcm.com/2007/12/guest/在 工(中)国有.jpg">考虑的情况越多,所写的正则就越复杂,相应的可读性和效率也就越差,正则只写合适当前所需的,不写考虑所有情况的
    Regex reg = new Regex(@"(?is)(?:<img[^>]*?src|\bbackground)=(?:(['""])(?<img>[^'"">]+)\1|(?<img>\S+))|\bbackground:url\((?<img>[^()]+)\)");
    MatchCollection mc = reg.Matches(yourStr);
    foreach (Match m in mc)
    {
        richTextBox2.Text += m.Groups["img"].Value + "\n";
    }
      

  15.   

    <img src=abc.jpg>这种形式取多了点,调整了一下Regex reg = new Regex(@"(?is)(?:<img[^>]*?src|\bbackground)=(?:(['""])(?<img>[^'"">]+)\1|(?<img>[^\s>]+))|\bbackground:url\((?<img>[^()]+)\)");
    MatchCollection mc = reg.Matches(yourStr);
    foreach (Match m in mc)
    {
        richTextBox2.Text += m.Groups["img"].Value + "\n";
    }