0

使用以下代码获取站点中的所有 url

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

这给了我所有的 URL。但我的问题是我只想提取以结尾的 url

1) .pdf

或者

2) .doc

例如

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

谁能帮我谢谢。

4

3 回答 3

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
>
于 2013-08-22T07:18:28.370 回答
1

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

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

它只匹配前两个 URL。

于 2013-08-22T07:21:50.767 回答
1

我想你需要搜索不区分大小写:

while( $html =~ m/<A HREF="(.*?\.(?:pdf|doc))"/ig ) {    
    print "$1\n";  
}
于 2013-08-22T07:31:22.417 回答