我在从特定网页抓取日期时遇到困难,因为该日期显然是传递给 JavaScript 函数的参数。我过去写过一些简单的抓取工具,没有任何重大问题,所以我没想到会出现问题,但我正在努力解决这个问题。该页面有 5-6 个日期,采用常规 yyyy/mm/dd 格式,如 dateFormat('2012/02/07')
理想情况下我想删除所有内容except我想将六个日期保存在一个数组中。到了现在,我连一次约会都无法成功,更不用说全部了。这可能只是一个格式错误的正则表达式,我已经找了很长时间了,以至于我再也找不到了。
Q1.为什么我没有得到与下面的正则表达式的匹配?
Q2。根据上面的问题,如何将所有日期抓取到数组中?我正在考虑假设页面上有 x 个日期,for 循环 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
为什么你的模式中有两个空白字符?
$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\('
在您的约会模式之前(但这不包含在您的匹配中)
(?='\))
是一个积极的前瞻断言,确保有'\)
图案之后
The g
修饰符让您的模式搜索字符串中的所有匹配项。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)