匹配http://wap.weather.com.cn/wap/weather/101221701.shtml中的<dl style="background:#fff;"><dd>3月27日星期二<br /> <img src="http://www.weather.com.cn/m/i/icon_weather/21x15/n00.gif" /><img src="http://www.weather.com.cn/m/i/icon_weather/21x15/d01.gif" /></dd><dt> 晴转多云8℃/25℃<br />&nbsp;南风小于3级转西南风小于3级</dt></dl><dl ><dd>3月28日星期三<br /> <img src="http://www.weather.com.cn/m/i/icon_weather/21x15/n01.gif" /><img src="http://www.weather.com.cn/m/i/icon_weather/21x15/d01.gif" /></dd><dt> 多云10℃/25℃<br />&nbsp;南风小于3级转东风3-4级</dt></dl><dl style="background:#fff;"><dd>3月29日星期四<br /> <img src="http://www.weather.com.cn/m/i/icon_weather/21x15/n04.gif" /><img src="http://www.weather.com.cn/m/i/icon_weather/21x15/d04.gif" /></dd><dt> 雷阵雨14℃/18℃<br />&nbsp;东风小于3级转南风3-4级</dt></dl>天气 代码如下
Pattern p  =Pattern.compile("<dt>(.*)<br />&nbsp;(.*)</dt>");
Matcher ma=p.matcher(str);
   while(ma.find()){
       String gro1 = ma.group(1);
   //String gro2 = ma.group(2);
  // String gro3 = ma.group(3);
  
   String gro = ma.group(2);
     p(gro1+"\n\n\n");
   p(gro);
 
   }  匹配 不成功为什么?

解决方案 »

  1.   


            String target = "<dt> 晴转多云8℃/25℃<br />&nbsp;南风小于3级转西南风小于3级</dt>\n<dt> 多云10℃/25℃<br />&nbsp;南风小于3级转东风3-4级</dt>\n<dt> 雷阵雨14℃/18℃<br />&nbsp;东风小于3级转南风3-4级</dt>";
            Pattern p = Pattern.compile("<dt>([^<]+?)<br />&nbsp;([^<]+?)</dt>");
            Matcher ma = p.matcher(target);
            while (ma.find()) {
                String gro1 = ma.group(1);
                String gro2 = ma.group(2);
                System.out.println(gro1 + " " + gro2);
            }
    简单的试了一下, 匹配是成功的,需要注意的是:
    1) .* 这个东西如果不是必须要,就尽量少用
    2) Matcher返回的结果是对应整个Pattern的
    3) 这个正则表达式中只有2对括号,也就是只有2个group还有,只说“匹配不成功”的话,别人很难帮你判断到底哪里出了问题的,尽量多提供点信息给大家分析。
      

  2.   

    <dt>(.*?)<br />&nbsp;(.*?)</dt>加个问号,尽量少匹配
      

  3.   


    public static void main(String[] args) {
    String s = "<dt> 雷阵雨14℃/18℃<br />&nbsp;东风小于3级转南风3-4级</dt><dt> 雷阵雨14℃/18℃<br />&nbsp;东风小于3级转南风3-4级</dt><dt> 雷阵雨14℃/18℃<br />&nbsp;东风小于3级转南风3-4级</dt>";
    Pattern p = Pattern.compile("<dt>.*?<br\\s*/>.*?</dt>");
    Matcher m = p.matcher(s);
    while(m.find()){
    System.out.println(m.group());
    }
    }//打印结果:
    <dt> 雷阵雨14℃/18℃<br />&nbsp;东风小于3级转南风3-4级</dt>
    <dt> 雷阵雨14℃/18℃<br />&nbsp;东风小于3级转南风3-4级</dt>
    <dt> 雷阵雨14℃/18℃<br />&nbsp;东风小于3级转南风3-4级</dt>