论坛首页 Java版

如何用正则表达式获得页面中的指定数据?

浏览 1313 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
最后更新时间:2007-08-27 关键字: 正则
我想得到一个table里的每一行数据,格式如下:
<tr>
<td align='center' class='orang'>07098</td>
<td width='35' align='center' class='yellow'>3</td>
<td width='26' align='center' class='yellow'>7</td>
</tr>

于是我写了这个程序,用来提取以<tr>开头,</tr>结尾的内容
String regEx=".+(<tr>.+</tr>).+";
Pattern p=Pattern.compile(regEx,Pattern.DOTALL);
Matcher m=p.matcher(string);  //string为页面的HTML代码
while(m.find())
{
    System.out.println(m.group(1));
}
但每次都只能得到表格的最后一行,这是为什么啊?
   
最后更新时间:2007-08-27
这个你想之用正则就实现比较麻烦,因为你要考虑各种复杂情况,
建议使用htmlparse之类的开源工具来实现.
   
0 请登录后投票
最后更新时间:2007-08-27
String string = "fsdfsdfdf<tr>"
	+ "<td align='center' class='orang'>07098</td>"
	+ "<td width='35' align='center' class='yellow'>3</td>"
	+ "<td width='26' align='center' class='yellow'>7</td>"
	+ "</tr>fsdfsdf";
		
String regEx = "<td(\\s*\\w*\\=*\\'*\\w*\\'*\\s*)*>\\d*";
Pattern p = Pattern.compile(regEx, Pattern.DOTALL);
Matcher m = p.matcher(string); // string为页面的HTML代码
while (m.find()) {
	System.out.println(m.group(0).split(">")[1]);
}



这个应该可以。
   
0 请登录后投票
最后更新时间:2007-08-27
用原来的方法总取到最后一条的原因是默认的匹配原则是贪婪的吧,第一个.+会匹配到最长的子串,因此只匹配了最后的一个格。
   
0 请登录后投票
最后更新时间:2007-08-27
如果, <tr>不小心, 没有结尾(在某些浏览器中, 因为结构比较紧凑, 显示有可能是理想的)

那你在用正则匹配的时候, 就会出现问题了.

方便起见, 采用nekoHTML, htmlparer.
性能考虑的话, 自己写算法, 逐字检索也不错的.
   
0 请登录后投票
最后更新时间:2007-08-28
我当初的思路是这样的,先用正则表达式提取出“<tr>...</tr>”之间的内容,然后再得到每个<td>...</td>之间的内容。
不道这样对不对。
   
0 请登录后投票
最后更新时间:2007-08-28
kusix 写道
String string = "fsdfsdfdf<tr>"
	+ "<td align='center' class='orang'>07098</td>"
	+ "<td width='35' align='center' class='yellow'>3</td>"
	+ "<td width='26' align='center' class='yellow'>7</td>"
	+ "</tr>fsdfsdf";
		
String regEx = "<td(\\s*\\w*\\=*\\'*\\w*\\'*\\s*)*>\\d*";
Pattern p = Pattern.compile(regEx, Pattern.DOTALL);
Matcher m = p.matcher(string); // string为页面的HTML代码
while (m.find()) {
	System.out.println(m.group(0).split(">")[1]);
}



这个应该可以。


这个可以,但是我还需要正确地去分隔每一段数据。
我当初的思路是这样的,先用正则表达式提取出“<tr>...</tr>”之间的内容,然后再用正则表达式得到每个<td>...</td>之间的内容。
不道这样对不对。
   
0 请登录后投票
论坛首页 Java版

跳转论坛:
JavaEye推荐