问一个关于java正则表达式的问题(总是少一个字母)

ZOU_SEAFARER 2014-02-17 11:31:28
本意是提取网页上的代理服务器的IP,端口以及其他的,一共5个字段。使用下面的表达式,发现第三个group开始,每个group都缺一个字符。即使没有中文也缺一个字符。如好色打印部分。请高手帮忙看看表达式是否有问题。。。。

    private List<String> parsePage_samair(String html){
List<String> ret = new ArrayList<String>();
SpiderProxyBase.baseLog("Enter parsePage_samair");

String regEx = "<tr><td>(\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3})<script.+?[^>]>:(\\d{1,5})</td><td>(.+?)[^<]</td><td>(.+?)[^<]</td><td>(.+?)[^<]</td></tr>";
Pattern pat = Pattern.compile(regEx,Pattern.DOTALL); //取消Pattern.DOTALL标记问题也在
Matcher mat = pat.matcher(html);
while(mat.find()){
StringBuffer result = new StringBuffer();
System.out.println(mat.group(1)); //41.65.38.227
System.out.println(mat.group(2)); //3128
System.out.println(mat.group(3)); //anonymous(这里相对html代码缺一空格)
System.out.println(mat.group(4)); //Feb-17, 06:4缺一字母
System.out.println(mat.group(5)); //Egyp缺一字母

result.append(mat.group(1)).append(";");
result.append(mat.group(2)).append(";");
result.append(mat.group(3)).append(";");
result.append(mat.group(4)).append(";");
result.append(mat.group(5));
ret.add(result.toString());
System.out.println(ret.get(ret.size() -1 ));
}

SpiderProxyBase.baseLog("Exit parsePage_samair");
return ret;
}



html字符串自取了2个作为例子
<tr><td>41.65.38.227<script type="text/javascript">document.write(":"+k+q+v+t)</script>:3128</td><td>anonymous </td><td>Feb-17, 06:48</td><td>Egypt</td></tr><tr><td>58.247.178.239<script type="text/javascript">document.write(":"+t+o+t+q)</script>:8081</td><td>anonymous </td><td>Feb-17, 10:38</td><td>China</td></tr>
...全文
189 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
ZOU_SEAFARER 2014-02-18
  • 打赏
  • 举报
回复
引用 2 楼 ZOU_SEAFARER 的回复:
结果尝试找到问题了 应该这样写 <tr><td>(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})<script .+?[^>]>:(\d{1,5})</td><td>(.+)[^<]*</td><td>(.+)[^<]*</td><td>(.+)[^<]*</td></tr>
这样写也不对,测试后还是解不出来。。。。。。。。
ZOU_SEAFARER 2014-02-18
  • 打赏
  • 举报
回复
的确是这个。谢谢哈。。以后有其他表达式我再来请教你。。我还把<script.+?[^>]>: ->>><script.+?>:改成这样了。反正是成了。[^<]我的本意是要非<符号的字符的。

String regEx = "<tr><td>(\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3})<script.+?[^>]>:(\\d{1,5})</td><td>(.+?)</td><td>(.+?)</td><td>(.+?)</td></tr>";
ghostkngiht 2014-02-18
  • 打赏
  • 举报
回复
试试这个
String regEx = "<tr><td>(\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3})<script.+?[^>]>:(\\d{1,5})</td><td>(.+?)</td><td>(.+?)</td><td>(.+?)</td></tr>";
ZOU_SEAFARER 2014-02-17
  • 打赏
  • 举报
回复
结果尝试找到问题了 应该这样写 <tr><td>(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})<script .+?[^>]>:(\d{1,5})</td><td>(.+)[^<]*</td><td>(.+)[^<]*</td><td>(.+)[^<]*</td></tr>
ZOU_SEAFARER 2014-02-17
  • 打赏
  • 举报
回复


贴一个附件,代码格式能好看点。。

62,610

社区成员

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

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