Перво-наперво: обработка HTML с использованием регулярных выражений - плохая идея.Они неадекватны для работы в принципе и сталкиваются с проблемами на практике.Об этом много написано.
Я понимаю, что вы "только" хотите подобрать заголовки, но у вас в руках полноформатный HTML-документ.Проблемы будут накапливаться, дела будут ухудшаться, и этому не будет конца.
Вместо этого, существует множество модулей, которые могут выполнять для вас анализ различных типов контента.Что касается таблиц, то, что вам нужно, HTML :: TableExtract , в частности, является отличным инструментом.
HTML-документ также может быть легко найден в вашем скрипте с помощью ряда хороших модулей.,Я использую LWP :: Simple ниже, но см., Например, полную структуру LWP :: UserAgent и Mojo .
Для простотыЯ выбираю первую таблицу в документе (которая оказывается правильной) и выполняю только базовую обработку для демонстрации.Я надеюсь, что вы можете взять его оттуда.
use warnings;
use strict;
use feature 'say';
use LWP::Simple;
use HTML::TableExtract;
use open qw(:encoding(UTF-8) :std);
my $url = 'https://nocable.org/tv-listings/2f46-miami-fl';
my $page = get($url) or die "Can't load $url: $!";
my $tec = HTML::TableExtract->new();
$tec->parse($page);
foreach my $rowref ($tec->rows)
{
next if not @$rowref;
# Clean up undefined/whitespace/newlines, often found in HTML
my @row = map {
$_ = '' if not defined; # keep undefined fields for formatting
s/^\s*|\s*$//g; #/ leading and trailing whitespace
s/\s+|\n/ /g; # multiple spaces, newlines
$_ # return it
} @$rowref;
say join ' | ', @row;
}
Обратите внимание на операторы очистки undef, пробела и перехода на новую строку, где arrayref для каждой строки «распаковывается» в массив.Есть и другие способы сделать это, но я оставил это необработанным, чтобы показать, как это происходит, когда вам нужно войти в детали HTML с помощью регулярного выражения.
Я заменяю неопределенные элементы пустыми строками на случай, если вы хотите отформатировать таблицу ивыровнять его элементы для печати.Я добавляю |
между элементами для облегчения просмотра.Пожалуйста, подстраивайтесь под свои нужды.
Первые несколько строк, также обрезанные для удобства чтения
All | 11:00 pm (ON AIR) | 11:30 pm | 12:00 am | 12:30 am | 1:00 am ...
WPBT2HD 2.1 | Celtic Woman: Ancient Land 11:00 pm | | | | Retire Safe ...
WPBT2-2 2.2 | Globe Trekker Delhi & Agra10:30 pm | Lidia's Kitchen ...
...