【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());
}
[解决办法]
单独要拿数字正则改成
"(?<=>)\\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());
}
}