Как очистить, используя LWP и регулярное выражение, аргумент даты для функции javascript? - PullRequest
2 голосов
/ 08 февраля 2012

У меня возникают трудности при извлечении дат с определенной веб-страницы, потому что дата, по-видимому, является аргументом, переданным в функцию javascript.В прошлом я написал несколько простых скребков без каких-либо серьезных проблем, поэтому я не ожидал проблем, но я борюсь с этим.На странице есть 5-6 дат в обычном формате гггг / мм / дд, как этот формат даты ('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 Ответ

3 голосов
/ 08 февраля 2012

Почему у вас есть два пробельных символа в вашем шаблоне?

$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 позволяет вашему шаблону искать все совпадения в строке.

...