收集* .txt文件的所有链接

时间:2011-03-25 22:43:11

标签: ruby regex

我需要检索HTML文档中文本文件的所有链接,我不知道最好的方法是什么,但是,我在ruby中尝试了以下内容...

line.scan(/<a href="([\w+:\/.-]*.txt)/)

但我不确定这个表达式是否涵盖指向文本文件的所有可能链接,我想知道是否有一些内置的正则表达式?或者如果有人知道更好的方法来检索巨大网页中文本文件的所有链接。

2 个答案:

答案 0 :(得分:6)

这将浏览HTML并找到所有带有&#39; .txt&#39;的hrefs。扩展:

#!/usr/bin/env ruby

require 'nokogiri'

html = <<EOT
<html>
  <head><title>foo</title></head>
  <body>
    <a href="file.txt">text file</a>
    <a href="file.jpg">jpg file</a>
    <a href="file2.txt">text file 2</a>
  </body>
</html>
EOT
doc = Nokogiri::HTML(html)
puts doc.search('a').select { |n| n['href'][/\.txt$/] }.map{ |n| n['href'] }

> file.txt
> file2.txt

它使用Nokogiri来解析内容,这比尝试使用正则表达式确实更具有防弹性。

答案 1 :(得分:1)

试试这个(捕获所有txt文件,而不仅仅是链接):

html.scan(/[^\s"']+\.txt/)

仅捕获指向文本文件的链接:

html.scan(/<a [^<>\n]*?href=["']([^\s"']+\.txt)["'][^<>\n]*?>.*?<\/a>/m)