2

我很难从特定网页中抓取日期,因为日期显然是传递给 javascript 函数的参数。我过去写过一些简单的刮板,没有任何重大问题,所以我没想到会出现问题,但我正在为此苦苦挣扎。该页面有 5-6 个常规 yyyy/mm/dd 格式的日期,例如 dateFormat('2012/02/07')

理想情况下,我想删除除了要保存在数组中的六个日期之外的所有内容。在这一点上,我什至无法成功约会,更不用说所有约会了。这可能只是一个格式不正确的正则表达式,我一直在寻找它,以至于我再也找不到了。

Q1。为什么我没有与下面的正则表达式匹配?

Q2。继上述问题之后,我如何将所有日期刮到一个数组中?我正在考虑假设页面上有 x 个日期,循环 x 次并将捕获的组分配给每个循环的数组,但这似乎相当笨拙。

问题代码如下。

#!/usr/bin/perl -w
use strict;
use LWP::Simple;
use HTML::Tree;

my $url_full = "http://www.tse.or.jp/english/market/STATISTICS/e06_past.html";
my $content = get($url_full);
#dateFormat('2012/02/07');
$content =~ s/.*dateFormat\('(\d{4}\/\d{2}\/\d{2}\s{2})'\);.*/$1/; # get any date without regard to greediness etc
4

1 回答 1

3

为什么你的模式中有两个空白字符?

$content =~ s/.*dateFormat\('(\d{4}\/\d{2}\/\d{2}\s{2})'\);.*/$1/;
                                                 ^^^^^

它们不在您的格式示例中'dateFormat('2012/02/07')'

我会说这就是您的模式不匹配的原因。

捕获所有日期

您可以简单地将所有匹配项放入这样的数组中

( my @Result ) = $content =~ /(?<=dateFormat\(')\d{4}\/\d{2}\/\d{2}(?='\))/g;

(?<=dateFormat\(')是一个积极的后向断言,可确保dateFormat\('在您的日期模式之前存在(但这不包括在您的匹配中)

(?='\))是一个积极的前瞻断言,确保'\)在模式之后

修饰符让您的g模式搜索字符串中的所有匹配项。

于 2012-02-08T08:56:04.760 回答