Задать вопрос
wbsr
@wbsr
Программист - любитель

Как составить регулярку на PHP?

Мне нужно получить все теги h1-h6 с веб страницы, причем именно в той последовательности в которой они на странице, а не отдельно h1, отдельно h2 итд

Сейчас я использую вот такую регулярку:

preg_match_all('{<h[0-6][^>]*>(.*?)</h[0-6]>}', $mytext, $matches, PREG_PATTERN_ORDER);


Но... Почему то она спотыкается на вот этой странице: xn----7sbf0aammwj1fq8g.xn--p1ai

Помогите пожалуйста добработать регулярку чтобы она работала на всех страницах включая вышеназванную
  • Вопрос задан
  • 85 просмотров
Подписаться 1 Простой 1 комментарий
Помогут разобраться в теме Все курсы
  • Skillfactory
    Профессия Fullstack веб-разработчик на JavaScript и PHP
    20 месяцев
    Далее
  • Хекслет
    PHP-разработчик
    10 месяцев
    Далее
  • Нетология
    Веб-разработчик с нуля: профессия с выбором специализации
    14 месяцев
    Далее
Решения вопроса 1
@remzalp
Программер чего попало на чем попало
1. не используйте регулярки для HTML. Есть огромное количество решений на базе DOM, css selector, xpath
2. Скорей всего регулярка ломается на этом:
<h4 class="textable">
  <h1 style="text-align: center;">
    ...
  </h1>
</h4>

И как, по Вашему мнению, это надо обрабатывать? Причем такая вложенность способна поломать логику и некоторым рекурсивным парсерам.

<(h[1-7])[^>]*>(.*?)<\/\1>
Вариант регулярки, которая ссылается на найденное название тэга, чтобы искать именно такой же закрывающий тэг.

Скорей всего можно сделать регулярку, которая захватит при этом внутренний заголовок, но она будет уже слишком сложная.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@Yan-s
Как уже посоветовали - никаких регулярок.
А из библиотек предложу https://github.com/Imangazaliev/DiDOM
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
FoodSoul Калининград
от 180 000 до 250 000 ₽
IT-Spirit Москва
от 230 000 до 320 000 ₽
от 200 000 до 290 000 ₽