日期:2014-05-20  浏览次数:20808 次

Java如何用正则表达式抓取匹配字符串成功部分?
Java模式匹配经典代码如下:
Java code
Pattern p = Pattern.compile("a*b");
 Matcher m = p.matcher("aaaaab");
 boolean b = m.matches();

但是我不想要这个样子的,太死板了,比如我希望以下代码能够匹配成功:

Java code
Pattern p = Pattern.compile("ab");
 Matcher m = p.matcher("wwwabzzz");  


我想说的是,我不仅希望能够匹配其中一部分能够匹配得到的,而且也希望抓取能够匹配到底那部分字符串

例如代码: start <table ....> <tr>tablecontent</tr></table> end
我希望能够通过匹配 <table .*?>.*?</table>
就能够抓取到table的内容,丢弃其它不要的部分。
p.matcher(""); 这个代码太傻了,只能匹配整个字符串。





------解决方案--------------------
String s = "<table id='44'>丰富风范仿佛<table id='33'>hahahaha<table id='22'>100<TABLE id='11'>center</TABLE>11</table>hehehehe</table>444444</table>";
String reg = "<table[^>]*>[^<]*<TABLE[^>]*>.*?</TABLE>.*?</table>";
Pattern pa = Pattern.compile(reg);
Matcher ma = pa.matcher(s);
boolean flag = ma.find();
if(flag){
System.out.println(ma.groupCount());
for(int i=0; i<=ma.groupCount(); i++){
System.out.println(i+":"+ma.group(i));
}
}