Java 正则表达式 提取html超链接
<ahref="../asdocs/html_tutorials/humor02.html">这是一个链接</a>,要提取../asdocs/html_tutorials...
<a href="../asdocs/html_tutorials/humor02.html">这是一个链接</a> ,要提取../asdocs/html_tutorials/humor02.html和 这是一个超链接,这两个东西,我的代码
<a\\shref=\"(http:.*[^>])\"*[^>]>(.*[^>])</a>,如果那一行只有这一个超链接,那是正确的,如果有多个,就错了,最好说明我哪错了,不然给出正确的也行
得到一个网站的源文件,按一行一行读取的 展开
<a\\shref=\"(http:.*[^>])\"*[^>]>(.*[^>])</a>,如果那一行只有这一个超链接,那是正确的,如果有多个,就错了,最好说明我哪错了,不然给出正确的也行
得到一个网站的源文件,按一行一行读取的 展开
3个回答
展开全部
你这个错就错在使用了.*
在正则里.*指的是匹配所有字符,而且是匹配优先,对于你这个正则来说到<a\\shref=\"(http:为止都是正常的,但后面的.*就会一直匹配到文件的最后,因为对于.*来说是匹配所有字符,所以后面的一切都是匹配的.匹配到最后结尾时,再来进行结尾检查,但你的正则是以</a>结尾的,不符合,所以就再回头向回一个个的查,一直查到(.*[^>])中的.*匹配.
好了,最后你这个表达式最终的结果其实就是匹配以<a\\shref=\"(http: 开头,以[^>])</a>结尾,中间是任意字符的表达式
在正则里.*指的是匹配所有字符,而且是匹配优先,对于你这个正则来说到<a\\shref=\"(http:为止都是正常的,但后面的.*就会一直匹配到文件的最后,因为对于.*来说是匹配所有字符,所以后面的一切都是匹配的.匹配到最后结尾时,再来进行结尾检查,但你的正则是以</a>结尾的,不符合,所以就再回头向回一个个的查,一直查到(.*[^>])中的.*匹配.
好了,最后你这个表达式最终的结果其实就是匹配以<a\\shref=\"(http: 开头,以[^>])</a>结尾,中间是任意字符的表达式
展开全部
<a\\s.*?href=\"([^\"]+)\"[^>]*>(.*?)</a>
结果中 组1为连接地址 组2为文字
结果中 组1为连接地址 组2为文字
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
正则表达式我不熟。
这类问题我更喜欢用javascript操作。
搜索所有的<a>标签,查找它的href属性和innerHTML
这类问题我更喜欢用javascript操作。
搜索所有的<a>标签,查找它的href属性和innerHTML
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询