首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2EE开发 >

【100分求正解】求正则,求赏赐,求解脱

2013-01-11 
【100分求正解】求正则,求恩赐,求解脱li classitema onclick href/attraction_review-d19-s64844

【100分求正解】求正则,求恩赐,求解脱
<li class="item"><a onclick="" href="/attraction_review-d19-s64844-05p1-huangshanfengjingqu.html">很好</a><span class="rank-bar"><em style="width: 80px"></em></span><a onclick="" href="/attraction_review-d19-s64844-05p1-huangshanfengjingqu.html">8</a></li><li class="item"><a onclick="" href="/attraction_review-d19-s64844-04p1-huangshanfengjingqu.html">较好</a><span class="rank-bar"><em style="width: 10px"></em></span><a onclick="" href="/attraction_review-d19-s64844-04p1-huangshanfengjingqu.html">1</a></li><li class="item"><span class="fake-a">一般</span><span class="rank-bar"><em style="width: 0px"></em></span><span class="fake-a">0</span></li><li class="item"><a onclick="" href="/attraction_review-d19-s64844-02p1-huangshanfengjingqu.html">较差</a><span class="rank-bar"><em style="width: 10px"></em></span><a onclick="" href="/attraction_review-d19-s64844-02p1-huangshanfengjingqu.html">1</a></li><li class="item"><span class="fake-a">很差</span><span class="rank-bar"><em style="width: 0px"></em></span><span class="fake-a">0</span></li></ul></div></div>

正则分别匹配很好的评价数 8  较好的评论数 1 很差的评论数 0
说明:很好,8,较好,1前面的<a>中的href会变动,最后取值需要group(0) 正则
[解决办法]



public class Test05 {

static String str = "<li class="item"><a onclick="" href="/attraction_review-d19-s64844-05p1-huangshanfengjingqu.html">很好</a><span class="rank-bar"><em style="width: 80px"></em></span><a onclick="" href="/attraction_review-d19-s64844-05p1-huangshanfengjingqu.html">8</a></li><li class="item"><a onclick="" href="/attraction_review-d19-s64844-04p1-huangshanfengjingqu.html">较好</a><span class="rank-bar"><em style="width: 10px"></em></span><a onclick="" href="/attraction_review-d19-s64844-04p1-huangshanfengjingqu.html">1</a></li><li class="item"><span class="fake-a">一般</span><span class="rank-bar"><em style="width: 0px"></em></span><span class="fake-a">0</span></li><li class="item"><a onclick="" href="/attraction_review-d19-s64844-02p1-huangshanfengjingqu.html">较差</a><span class="rank-bar"><em style="width: 10px"></em></span><a onclick="" href="/attraction_review-d19-s64844-02p1-huangshanfengjingqu.html">1</a></li><li class="item"><span class="fake-a">很差</span><span class="rank-bar"><em style="width: 0px"></em></span><span class="fake-a">0</span></li></ul></div></div>";

//[很好 , 较好 , 较差 ] 都用这个方法
static String findA(String key){
String regexp = "<a.*?href="(.*?)".*?>" + key + "</a>.*?<a.*?href="(\\1)".*?>(.*?)</a>";
Matcher m = Pattern.compile(regexp).matcher(str);
if(m.find()){
return m.group(3);
}
return null ;


}

// [一般 、很差 ] 用这个方法 , 因为结构与上面的不同
static String findB(String key){
String regexp = "<span class="fake-a">" + key + "</span>.*?<span class="fake-a">(.*?)</span>";
Matcher m = Pattern.compile(regexp).matcher(str);
if(m.find()){
return m.group(1);
}
return null ;
}

public static void main(String[] args) {
System.out.println(findA("很好"));
System.out.println(findA("较好"));
System.out.println(findA("较差"));

System.out.println(findB("一般"));
System.out.println(findB("很差"));

}
}


[解决办法]
如果就在这个字符串里面,格式是固定的话。可以这样

String s=你上面的html串;
Matcher m=Pattern.compile("(?<=>).*?(?=(</a>
[解决办法]
</span>))").matcher(s);
while(m.find()){
   System.out.println(m.group());
}

[解决办法]
引用:
如果就在这个字符串里面,格式是固定的话。可以这样


Java code
?



123456

String s=你上面的html串; Matcher m=Pattern.compile("(?<=>).*?(?=(</a>
[解决办法]
</span>))").matcher(s); while(m.find()){    System.out.println(m.group()); ……

单独要拿数字正则改成
"(?<=>)\\d+(?=(</a>
[解决办法]
</span>))"
[解决办法]
虽然不知道楼主为何会有这种需求不过还是写了一个

String html=你的html内容;
String[] s={"很好","较好","一般","较差","很差"};
int start=0;//正则搜索的起始位置
Pattern p=null;
for(int i=0;i<s.length;i++){
p=(i!=s.length-1)?Pattern.compile("(?<=>)\\d+(?=<.*?"+s[i+1]+")"):Pattern.compile("(?<=>)\\d+(?=<.*?)");
Matcher m=p.matcher(html);
if(m.find(start)){
start=m.end();//下一次搜索的起始位置
System.out.println(s[i]+":"+m.group());
   }
}

热点排行