从perl中的url列表中提取URL

时间:2013-08-22 07:07:22

标签: regex perl url

使用以下代码即可获取网站中的所有网址

while( $html =~ m/<A HREF=\"(.*?)\"/g ) {    
      print "$1\n";  
  }

它给了我所有的URL。但我的问题是我想用

提取网址结尾

1).pdf

2).doc

例如

http://nc.casaforchildren.org/files/public/site/jobs/CSO.pdf

任何人都可以帮助我。

3 个答案:

答案 0 :(得分:1)

 m/<A HREF=\"(.*?(.pdf|.doc))\"/g

它在我的地方工作:

> cat temp
<A HREF="http://nc.casaforchildren.org/files/public/site/jobs/CSO.pdf">bwfjbwej</A>
<A HREF="http://nc.casaforchildren.org/files/public/site/jobs/CSO.xls">bwfjbwej</A>
<A HREF="http://nc.casaforchildren.org/files/public/site/jobs/CSO.doc">bwfjbwej</A>

> perl -lne 'print $1 if(/<A HREF=\"(.*?(.pdf|.doc))\"/g)' temp
http://nc.casaforchildren.org/files/public/site/jobs/CSO.pdf
http://nc.casaforchildren.org/files/public/site/jobs/CSO.doc
>

答案 1 :(得分:1)

如果您的分组(.*?)与所有网址匹配,则应该使用:

while( $html =~ m/<A HREF=\"(.*?(\.pdf|\.doc))\"/g ) {    
      print "$1\n";  
  }

请注意,这也与.pdf匹配,这可能不是您正在搜索的内容。模式.*?是贪婪的,非常危险的。

/编辑

我在http://regexpal.com/

上试了一下
\b(.*(\.pdf|\.doc))\b

http://nc.casaforchildren.org/files/public/site/jobs/CSO.pdf
http://nc.casaforchildren.org/files/public/site/jobs/CSO.doc
http://nc.casaforchildren.org/files/public/site/jobs/CSO.pdd
.pdf
http://nc.casaforchildren.org/files/public/site/jobs/CSO.pdfawd

它只匹配前两个网址。

答案 2 :(得分:1)

我猜你需要搜索不区分大小写的内容:

while( $html =~ m/<A HREF="(.*?\.(?:pdf|doc))"/ig ) {    
    print "$1\n";  
}