我已经下载了一个网页,我想提取该文件中的所有链接。这个链接包括绝对和亲戚。例如我们有:
<script type="text/javascript" src="/assets/jquery-1.8.0.min.js"></script>
或
<a href="http://stackoverflow.com/" />
所以在阅读完文件后,我该怎么办?
答案 0 :(得分:0)
如果你想使用Java内置的正则表达式系统,这并不复杂。硬位是找到正确的正则表达式来匹配URL [1] [2] 。为了回答,我会假设你已经完成了这项工作,并将其作为Pattern
存储,其语法如下:
Pattern url = Pattern.compile("your regex here");
以及迭代每一行的某种方式。您要做的是定义ArrayList<String>
:
ArrayList<String> urlsFound = new ArrayList<>();
从那里开始,您将有一些循环来遍历您的文件(假设每一行都是<? extends CharSequence> line
),并且在内部你会把它放在:
Matcher urlMatch = url.matcher(line);
while (urlMatch.find()) urlsFound.add(urlMatch.match());
这样做可以为您的专线创建Matcher
,并为之前的网址匹配Pattern
。然后,它循环直到#find()
返回false(即,没有更多匹配)并将匹配(带#group()
)添加到列表urlsFound
。
在循环结束时,urlsFound
将包含网页上所有网址的所有匹配项。请注意,如果您有大量文字,这可能会占用大量内存,因为urlsFound
会变得非常大,并且您将创建并放弃大量Matcher
秒。
1:我发现了一些a quick Google search的好网站;据我所知,作物的奶油似乎是here和here。您的需求可能会有所不同。
2:您需要确保使用单个组捕获整个网址,否则根本不会工作。但是,如果有多个部分,可以调整它。