java 正则表达式 求解 求代码 急

Felix Yin 2012-05-31 04:49:38
<tr>
<td class="">10.5.238.184</td>
<td class="">QM_BRK_11</td>
<td class="">NBL.OUT.FILTER.REQ</td>
<td class="">0</td>
</tr>

<tr>
<td class="red">10.5.238.184</td>
<td class="red">QM_BRK_11</td>
<td class="red">NBL.OUT.MSGSERVER.REQ</td>
<td class="red">18753</td>
</tr>

我获得一个页面文件,现在我要过滤,只要class="red"的 比如:<td class="red">10.5.238.184</td>
然后在控制台输出,。求解,能提供代码,
...全文
93 6 打赏 收藏 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
Felix Yin 2012-06-01
  • 打赏
  • 举报
回复
谢[Quote=引用 5 楼 的回复:]
给你个匹配能力更强的写法:

String html = "<tr>\n<td class=\"\">10.5.238.184</td>\n<td class=\"\">QM_BRK_11</td>\n<td class=\"\">NBL.OUT.FILTER.REQ</td>\n<td class=\"\">0</td>\n</tr>\n\n<tr>\n<td a=\"a\" class=\……
[/Quote]
MiceRice 2012-05-31
  • 打赏
  • 举报
回复
给你个匹配能力更强的写法:

String html = "<tr>\n<td class=\"\">10.5.238.184</td>\n<td class=\"\">QM_BRK_11</td>\n<td class=\"\">NBL.OUT.FILTER.REQ</td>\n<td class=\"\">0</td>\n</tr>\n\n<tr>\n<td a=\"a\" class=\"red\" >10.5.238.184</td>\n<td class=\"red\" b=\"b\">QM_BRK_11</td>\n<td class=\"red\">NBL.OUT.MSGSERVER.REQ</td>\n<td class=\"red\">18753</td>\n</tr>";

Pattern pattern = Pattern.compile("<td\\s+([^>]+\\s+)*class=\"red\"\\s*([^>]+\\s*)*>([^<]*)</td>");

Matcher matcher = pattern.matcher(html);

while (matcher.find()) {
System.out.println(matcher.group(0));
System.out.println(matcher.group(3));
}

MiceRice 2012-05-31
  • 打赏
  • 举报
回复
group(0):取出匹配的整段
数字还可以是1~n,那么就是取出制定的匹配区,比如:

Pattern pattern = Pattern.compile("<td class=\"red\">([^<]*)</td>"); // 多加了小括号
System.out.println(matcher.group(1)); // 1,代表第一个小括号
Felix Yin 2012-05-31
  • 打赏
  • 举报
回复
3QU,
请问System.out.println(matcher.group(0));
matcher.group(0)是什么意思。
[Quote=引用 2 楼 的回复:]
最土就是这样:
String html = "<tr>\n<td class=\"\">10.5.238.184</td>\n<td class=\"\">QM_BRK_11</td>\n<td class=\"\">NBL.OUT.FILTER.REQ</td>\n<td class=\"\">0</td>\n</tr>\n\n<tr>\n<td class=\"red\">10.5.238.……
[/Quote]
MiceRice 2012-05-31
  • 打赏
  • 举报
回复
最土就是这样:
String html = "<tr>\n<td class=\"\">10.5.238.184</td>\n<td class=\"\">QM_BRK_11</td>\n<td class=\"\">NBL.OUT.FILTER.REQ</td>\n<td class=\"\">0</td>\n</tr>\n\n<tr>\n<td class=\"red\">10.5.238.184</td>\n<td class=\"red\">QM_BRK_11</td>\n<td class=\"red\">NBL.OUT.MSGSERVER.REQ</td>\n<td class=\"red\">18753</td>\n</tr>";

Pattern pattern = Pattern.compile("<td class=\"red\">[^<]*</td>");

Matcher matcher = pattern.matcher(html);

while (matcher.find()) {
System.out.println(matcher.group(0));
}


局限性就是td里面不能有其它属性,如果要能智能点,那么就还需要修改。
brightyq 2012-05-31
  • 打赏
  • 举报
回复
实在是用不着正则,
只需判断每一行是否以<td class="red">开头即可,如果是就输出。

62,620

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧