当前位置:编程学习 > JAVA >>

关于java的正则表达式问题

匹配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 /> 南风小于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 /> 南风小于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 /> 东风小于3级转南风3-4级</dt>

</dl>



天气 代码如下


Pattern p  =Pattern.compile("<dt>(.*)<br /> (.*)</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);
 
   }  

匹配 不成功为什么? --------------------编程问答--------------------

        String target = "<dt> 晴转多云8℃/25℃<br /> 南风小于3级转西南风小于3级</dt>\n<dt> 多云10℃/25℃<br /> 南风小于3级转东风3-4级</dt>\n<dt> 雷阵雨14℃/18℃<br /> 东风小于3级转南风3-4级</dt>";
        Pattern p = Pattern.compile("<dt>([^<]+?)<br /> ([^<]+?)</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

还有,只说“匹配不成功”的话,别人很难帮你判断到底哪里出了问题的,尽量多提供点信息给大家分析。 --------------------编程问答-------------------- <dt>(.*?)<br /> (.*?)</dt>

加个问号,尽量少匹配 --------------------编程问答--------------------

public static void main(String[] args) {
String s = "<dt> 雷阵雨14℃/18℃<br /> 东风小于3级转南风3-4级</dt><dt> 雷阵雨14℃/18℃<br /> 东风小于3级转南风3-4级</dt><dt> 雷阵雨14℃/18℃<br /> 东风小于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 /> 东风小于3级转南风3-4级</dt>
<dt> 雷阵雨14℃/18℃<br /> 东风小于3级转南风3-4级</dt>
<dt> 雷阵雨14℃/18℃<br /> 东风小于3级转南风3-4级</dt>

补充:Java ,  Java SE
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,