网页源码中,通常有这三种img标记的形式,第一种不太规范,但它也不影响显示图片1.<img href='www.baidu.com' id='new'>2.<img href='www.google.com' id='new'/>3.<img href='www.baidu.com' id='new'>图片</img>
如何用一个正则表达式把这三种类型的img提取出来,我当时写的正则表达式能把2,3这两种能提取出来。
但是碰到了第1种就出现了问题了。不知道如何提取,问题在于:在第3种的形式上也包含了第1种,我希望当碰到第三种的时候只提取第3种而忽略第1种那种形式。请高手指教。十分感谢。
我还想请问《精通正则表达式》这本书如何?你们有接触过吗,我想买来看看。

解决方案 »

  1.   


    public class RegexTest {
    public static void main(String[] args) {
    String[] strs = { "<img href='www.baidu.com' id='new'>sdfsdf<a></a>",
    "<img href='www.google.com' id='new'/>asdasdasd<tr></tr>",
    "<img href='www.baidu.com' id='new'>图片</img><body></body>" };
    Pattern p = Pattern.compile("<img[^>]*>(.*</img>)?");
    Matcher m = null;
    for (String str : strs) {
    m = p.matcher(str);
    while (m.find())
    System.out.println(m.group());
    }
    }
    }
      

  2.   

    http://search.download.csdn.net/search/%E7%B2%BE%E9%80%9A%E6%AD%A3%E5%88%99
    精通正则电子版的  去下吧
      

  3.   

    看来火龙果是其中大收益人啊,感受这么深,好的,我会去买正版的。
    其实十分佩服火龙果,只要是提到正则的地方,都有他在。呵呵closewbq,感谢你的回答。
    但是我用的测试的字符串是:String str="你不<img href='www.baidu.com' id='new'>是吧abc<img href='www.google.com' id='new'/>图片<img href='www.csdn.com' id='new'>点击跳转</img>";当这样的时候就有问题了, <img href='www.csdn.com' id='new'>点击跳转</img> 这个没有提取了,只提取了:<img href='www.csdn.com' id='new'>问题回到了我提问的问题了。呵呵。加油。
      

  4.   

    public class RegexTest {
    public static void main(String[] args) {
    String str = "你不 <img href='www.baidu.com' id='new'>是吧abc <img href='www.google.com' id='new'/>图片 <img href='www.csdn.com' id='new'>点击跳转 </img>";
    Pattern p = Pattern.compile("<img[^>]*>(.[^<]*</img>)?");
    Matcher m = p.matcher(str);
    while (m.find())
    System.out.println(m.group());
    }
    }
      

  5.   

    String str = "(?i)<img\\b[^>/]*(?:/>|>(?:[^<]*</img>)?)";