Во-первых, у Ленты есть RSS, привязываться к верстке нежелательно:
На момент запуска нового сайта доступны следующие RSS:
/rss/news — новости
/rss/top7 — самые свежие и самые важные новости
/rss/last24 — главные новости за последние сутки
/rss/articles — все статьи
/rss/columns — колонки
/rss/news/russia — новости рубрики «Россия»; после косой черты можно написать английское название любой рубрики — обращайте внимание на их url (например, /rss/news/world — это уже все новости рубрики «Мир»)
/rss/articles/russia — все статьи рубрики «Россия»; управление рубриками аналогичное
/rss/photo — все галереи
/rss/photo/russia — все галереи рубрики «Россия»; управление рубриками аналогичное
Во-вторых, что касается парсинга XML, то регулярные выражения для этого использовать также не лучшая идея. Их вообще лучше никогда не использовать при возможности. Распарсить XML можно с помощью SimpleXML или
Nokogiri. И конкретно для RSS есть несколько
библиотек.
Пример:
libxml_use_internal_errors(true); // Не провоцировать генерацию ошибок в php из-за ошибок разбора html
$html = file_get_contents("https://lenta.ru/news/2016/06/02/trol/");
$page = new domDocument();
$page->loadHTML("<?xml version='1.0' encoding='UTF-8'?>" . $html); // Явное указание кодировки полученных данных
$article = "";
$domXpath = new DOMXPath($page);
$newDom = new DOMDocument();
$newDom->formatOutput = true;
$filtered = $domXpath->query("//div[@itemprop='articleBody']");
$i = 0;
while ($item = $filtered->item($i++)) {
$node = $newDom->importNode($item, true);
$newDom->appendChild($node);
}
$article = $newDom->saveHTML();
libxml_clear_errors(); // Очищение буфера ошибок.