Как в данном варианте получить четвертый параграф?
Вот пример:
<p class="p-1"></p><p class="p-2"></p> <div class="wrap"><p class="p-3"></p></div><p class="p-4"></p><p class="p-5"></p> и т.д. |
<p class="p-1"></p><p class="p-2"></p> <div class="wrap"><p class="p-3"></p></div><p class="p-4"></p><p class="p-5"></p> и т.д.
Как в данном варианте можно получить только 4 параграф?
Использовал такое регулярное выражение, но он выбирает все после дива: (?<=</w>).+</?p[^>]*>(.*?)</p>
Дело в том, что верстка и расположение классов могут отличаться, но всегда нужно получать 4 параграф.
Дополнительно:
Сформулировать, какими "разными" могут быть верстка и классы и что такое "пятый параграф".
Возможно, имеет смысл не регулярка, а разбор DOM, классы для этого есть в РНР.
Допустим пример данного разбора DOM возможен?
Ведь с помощью метода getElementsByTagName я получу все параграфы, а мне нужно только четвертый.
Забрать параграф и сделать strip_tags
Вы всерьёз спрашиваете, как из готового списка получить элемент по номеру? Пусть даже тупым перебором?
<?php $html = <<<HTML <p class="p-1">p1</p><p class="p-2">p2</p> <div class="wrap"><p class="p-3">p3</p></div><p class="p-4">p4</p><p class="p-5">p5</p> HTML; preg_match_all('!<p[^>]{0,}>(.*?)</p>!si', $html, $out); var_dump($out[0][3]); |
<?php $html = <<<HTML <p class="p-1">p1</p><p class="p-2">p2</p> <div class="wrap"><p class="p-3">p3</p></div><p class="p-4">p4</p><p class="p-5">p5</p> HTML; preg_match_all('!<p[^>]{0,}>(.*?)</p>!si', $html, $out); var_dump($out[0][3]);
если нужно внутреннее содержимое 4 параграфа то соотв-но достаём его из $out[1][3]
- Спасибо большое.
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос
Для получения четвертого параграфа на странице можно использовать следующий код:
$html = file_get_contents('http://www.example.com/page.html'); $doc = new DOMDocument(); $doc->loadHTML($html); $paragraphs = $doc->getElementsByTagName('p'); if ($paragraphs->length >= 4) { $fourthParagraph = $paragraphs->item(3)->nodeValue; echo $fourthParagraph; } else { echo 'Fourth paragraph not found'; }
В этом коде мы сначала получаем HTML-код страницы с помощью функции file_get_contents, затем загружаем его в объект DOMDocument. Далее мы находим все теги параграфов на странице с помощью метода getElementsByTagName и проверяем, достаточно ли параграфов на странице для получения четвертого. Если да, то выводим содержимое четвертого параграфа, иначе выводим сообщение о том, что четвертый параграф не найден.
Примечание: Для работы этого кода необходимо включить поддержку DOM в PHP, убедившись, что расширение php_domxml установлено и включено в конфигурации PHP.