利用java.net.URL已经获取网页代码,想从其中的“指定内容”获取“URL”地址,我查看了些正则教程还是未能解答出,麻烦请问大侠们这个正则表达式应该如何写,谢谢!
[b]问题补充:[/b]
TO:pwg17
如果自己解析,应该如何解析,我确实想不出高效的方法。希望指教。
不建议用正则表达式。
正则表达式的话,分两步,先区配a标签,然后再区配a标签里面的链接。
区配a标签的: [code="java"]])*>[/code]
以上正则表达式参考《精通正则表达式》。
简单的解析Html任务的话用用正则表达式还可以,要求长期稳定运行的话,由于Html的不确定性和不规范,正则表达式常会遇到 指数级区配问题和CPU占用过高,特别是在多线程中。指数级区配表现为CPU 100%,程序卡在那里。
String content = "<a href=\"URL\">";
String pattern= "href=\"([^\"]*)\"";
Pattern p = Pattern.compile(pattern, 2 | Pattern.DOTALL);
Matcher m = p.matcher(content);
if(m.find()) {
System.out.println("url="+m.group(1));
}
可参考htmlparser,项目地址:http://htmlparser.sourceforge.net/ 。
以想提取出页面中所有a标签为例子,简单点说,网页源码按字符一个一个从头到尾读取,遇到 '<' 时,判断下一个字符串是否是'a',若是'a'的话,在判断后面是否是空格("\r\n\t ")。若是的话,表示遇到a标签了,接下来就是解析这个标签的属性名和属性值,如,跳过'a' 后面的空格后,读取下一个字符,直到遇到'=',空格或单引号或双引号,这些读取出来的就是属性名,......请看htmlparser,里面很详细。
也可用堆栈结构解析Html。看你是要做什么了,简单任务的话,没必要弄这么复杂。用正则表达式就算了。