首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >这场比赛合适吗?

这场比赛合适吗?
EN

Stack Overflow用户
提问于 2014-05-28 16:39:35
回答 2查看 109关注 0票数 0

使用perl regex,我试图刮掉网站的html,然后在下面的代码中匹配URL和版本号。不管我用了什么,它都与字符串不匹配。

要匹配的字符串:<a itemprop='downloadUrl' href='http://downloads.wordpress.org/plugin/wordfence.5.0.9.zip'>Download Version 5.0.9</a> </p>

我需要得到字符串中形成href=值和版本号的部分。

我试过:

代码语言:javascript
复制
if($page =~ /.*<a itemprop='downloadUrl' href='(.*)' Download Version (.*)<\/a>/) 
        {
            $url = $1;
            $version = $2;

$page包含如下所示的块:

代码语言:javascript
复制
<div id="plugin-description">
    <p itemprop="description" class="shortdesc">
        Wordfence Security is a free enterprise class security and performance plugin that makes your site up to 50 times faster and more secure.   </p>
    <div class="description-right">
                <p class="button">
            <a itemprop='downloadUrl' href='http://downloads.wordpress.org/plugin/wordfence.5.0.9.zip'>Download Version 5.0.9</a>       </p>
<meta itemprop="softwareVersion" content="5.0.9" />
<meta itemprop="fileFormat" content="application/zip" />

                    </div>
</div>
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-05-28 16:50:11

您的正则表达式不匹配,因为您缺少了标记的正确锚点>,并且需要在Download之前删除前面的空格。

代码语言:javascript
复制
if ($page =~ /.*<a itemprop='downloadUrl' href='(.*)'>Download Version (.*)<\/a>/)
                                                     ^^

备注:对于非贪婪的匹配,您应该使用?跟踪所有的.*

票数 3
EN

Stack Overflow用户

发布于 2014-05-28 17:02:01

使用实际的HTML,如Mojo::DOMMojo::UserAgent来解析HTML。在Mojocast Episode 5上有一个关于这个框架的所有功能的8分钟的视频。

代码语言:javascript
复制
use strict;
use warnings;

use Mojo::UserAgent;

my $url = "https://wordpress.org/plugins/wordfence/";

my $ua = Mojo::UserAgent->new;
my $dom = $ua->get($url)->res->dom;

# Process all links
for my $link ($dom->find('a[itemprop=downloadUrl]')->each) {
    if ($link->text =~ /Download Version (.*)/) {
        print "$link->{href} -> $1";
    }
}

产出:

代码语言:javascript
复制
http://downloads.wordpress.org/plugin/wordfence.5.0.9.zip -> 5.0.9

注意:正则表达式中的一个缺陷是到处都在使用贪婪的匹配。您应该将所有的.*更改为.*?

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23917331

复制
相关文章

相似问题

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