考虑到我们有这个正则表达式匹配页面中的URL:
(https?):\\/\\/(www\\.)?[a-z0-9\\.:].*?(?=\\s)
我的问题是我们如何改进它,例如匹配:
http://stackoverflow.com/questions/ask
而不是:
http://stackoverflow.com/questions/ask">home</a></div><div>
简而言之,我希望它能过滤通常位于网页HTML代码中的网址之后的任何;:'".,<>?«»“”‘’
。
答案 0 :(得分:0)
由于您已经在使用JSOUP,我认为获取所有链接的最佳方法是使用此库。它不会失去原创性,它是您的代码安全性,可读性和可维护性的问题。
来自href
和src
属性的Here is an example from Jsoup Cookbook how you can collect all links(基本上,从你的正则表达式中我看到你只想匹配那些):
List<String> links = new ArrayList<String>();
Document doc = Jsoup.connect(url).get();
Elements links = doc.select("a[href]");
Elements media = doc.select("[src]");
Elements imports = doc.select("link[href]");
for (Element src : media) {
links.add(src.attr("abs:src"));
}
for (Element link : imports) {
links.add(link.attr("abs:href"));
}
for (Element link : links) {
links.add(link.attr("abs:href"));
}
请注意,此方法可让您获取所有绝对路径链接,即使是相对的链接。
如果您不需要并希望向老板炫耀,请尝试以下正则表达式:
https?://(?:www\\.)?[a-z0-9.:][^<>"]+
请参阅regex demo
此处,[^<>"]+
匹配<
,>
和"
以外的1个或多个符号。因此,它限制正则表达式不跨越属性边界。您也可以在那里添加'
。