Поскольку это HTML, вам, вероятно, понадобится модуль XPath, созданный для работы с HTML, HTML :: TreeBuilder :: XPath.
Сначала вам нужно проанализировать вашу строку с помощью методов HTML :: TreeBuilder. Предполагая, что содержимое вашей веб-страницы находится в переменной с именем $content, сделайте это следующим образом:
my $tree = HTML::TreeBuilder->new;
$tree->parse_file($file_name);
Теперь вы можете использовать выражения XPath для получения итераторов по интересующим вас узлам. Это первое выражение получает все td узлы, которые находятся в tr в table в body в элементе html:
my $tdNodes = $tree->findnodes('/html/body/table/tr/td');
Наконец, вы можете просто перебрать все узлы в цикле, чтобы найти то, что вам нужно:
foreach my $node ($tdNodes->get_nodelist) {
my $data = $node->findvalue('.'); // the content of the node
print "$data\n";
}
См. Документацию HTML :: TreeBuilder. для получения дополнительной информации о его методах и NodeSet документация по использованию объекта результата NodeSet. У w3schools есть сносное руководство по XPath, которое можно найти здесь.
При всем этом у вас должна быть возможность выполнять довольно надежный синтаксический анализ HTML, чтобы извлечь любой элемент, который вы хотите. Вы даже можете указать классы, идентификаторы и многое другое в своих запросах XPath, чтобы точно определить, какие узлы вам нужны. На мой взгляд, анализ HTML с использованием этой модифицированной библиотеки XPath намного быстрее и удобнее в обслуживании, чем работа с кучей одноразовых регулярных выражений.
person
jasonmp85
schedule
21.05.2010