浏览 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)); } 但每次都只能得到表格的最后一行,这是为什么啊? 声明:JavaEye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
|
|
| 返回顶楼 | |
|
最后更新时间:2007-08-27
这个你想之用正则就实现比较麻烦,因为你要考虑各种复杂情况,
建议使用htmlparse之类的开源工具来实现. |
|
| 返回顶楼 | |
|
最后更新时间: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]);
}
这个应该可以。 |
|
| 返回顶楼 | |
|
最后更新时间:2007-08-27
用原来的方法总取到最后一条的原因是默认的匹配原则是贪婪的吧,第一个.+会匹配到最长的子串,因此只匹配了最后的一个格。
|
|
| 返回顶楼 | |
|
最后更新时间:2007-08-27
如果, <tr>不小心, 没有结尾(在某些浏览器中, 因为结构比较紧凑, 显示有可能是理想的)
那你在用正则匹配的时候, 就会出现问题了. 方便起见, 采用nekoHTML, htmlparer. 性能考虑的话, 自己写算法, 逐字检索也不错的. |
|
| 返回顶楼 | |
|
最后更新时间:2007-08-28
我当初的思路是这样的,先用正则表达式提取出“<tr>...</tr>”之间的内容,然后再得到每个<td>...</td>之间的内容。
不道这样对不对。 |
|
| 返回顶楼 | |
|
最后更新时间: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>之间的内容。 不道这样对不对。 |
|
| 返回顶楼 | |







