如何使用LWP和正则表达式,将日期参数刮到javascript函数?

时间:2012-02-08 08:50:04

标签: regex perl lwp

我在从特定网页上抓取日期时遇到困难,因为日期显然是传递给javascript函数的参数。我过去曾写过几个简单的刮刀,没有任何重大问题所以我没想到会出现问题,但我正在努力解决这个问题。该页面有常规yyyy / mm / dd格式的5-6个日期,例如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

1 个答案:

答案 0 :(得分: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修饰符让您的模式搜索字符串中的所有匹配项。