首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >怎样才能找到这条线呢?

怎样才能找到这条线呢?
EN

Stack Overflow用户
提问于 2012-01-09 14:33:32
回答 3查看 113关注 0票数 1

我有一条很长的线,在这里我想找到所有的链接,当它们后面跟着class="filelink"

链接可以是这样的

代码语言:javascript
复制
<a href="https://example.com/@api/files/123/=2008.pdf" class="filelink"

这样的问题是如何写成Perl一行的呢?

更新

如果我做了

代码语言:javascript
复制
echo '<a href="https://example.com/@api/files/123/=2008.pdf" class="filelink"' > test
perl -pe 's/href="(.*)" class="filelink"/\1/g' test

然后我得到

代码语言:javascript
复制
<a https://example.com/@api/files/123/=2008.pdf

在我预料的地方

代码语言:javascript
复制
https://example.com/@api/files/123/=2008.pdf
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-01-09 15:32:31

代码语言:javascript
复制
perl -nE'say for m/<a\s+href="([^"]+)"\s+class="filelink"[^>]*>/g;'
票数 3
EN

Stack Overflow用户

发布于 2012-01-09 15:13:50

使用健壮的HTML解析器而不是regex的解决方案:

代码语言:javascript
复制
<input_long_line.html perl -MWeb::Query=wq -ne '
    wq($_)
    ->find("a.filelink")
    ->each(sub {
        printf "URL %s\t text %s\n", $_[1]->attr("href"), $_[1]->text
    })'

为了便于阅读,我把它包装起来,它就像一条衬里一样好用。

票数 10
EN

Stack Overflow用户

发布于 2012-01-09 23:06:31

使用HTML::TreeBuilder::XPath的另一种方法,我觉得很不错:

代码语言:javascript
复制
M=HTML::TreeBuilder::XPath; \
perl -M$M -le 'print $_->attr("href") for ' \
           -e "$M->new_from_content(<STDIN>)->" \
           -e 'findnodes(q(//a[@class="filelink"]))' < input-file
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8790004

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档