Регулярка c 3-я группами и подэлементами

159
12 августа 2017, 04:18

Всем привет, Выложил небольщой кусочек html-кода c 3-я группами

Alternative
Anime
Arabic

и нужно регуляркой разобрать группы с подэлементами. Эти группы имеют подэлементы завернутые в

    Но не все : 2 элемент НЕ имеет подэлементов поэтому регулярка работает неправильно и во вторую группу Anime попадают элементы из 3й группы sandbox Понятно что в регулярку можно было бы добавить условие

    list top-level-subgenres
    

    но тогда 2я группа Anime будет пропущена - чего не хотелось бы.

    Можно ли составить регурярку так чтобы попали все 3 группы с правильными подэлементами и 2я группа была пустой ?

    Спасибо!

    Answer 1

    Не нужно парсить HTML. Воспользуйтесь DOMDocument или другими альтернативными средствами специально предназначенными для разбора HTML. Пример работы с DOMDocument:

    # создаём парсер
    $dom = new DOMDocument();
    # Загружаем html строку
    # @ перед вызовом заглушает ошибки т.к.
    # loadHTML может кидать исключения при невалидном HTML
    @$dom->loadHTML($html);
    # получаем всем теги <a>
    foreach($dom->getElementsByTagName('a') as $link) {
            # печатаем содержимое <a href>
            echo $link->getAttribute('href');
            echo "<br />";
    }
    
    READ ALSO
    Подключить wordpress api к скрипту php

    Подключить wordpress api к скрипту php

    Есть wordpress и есть файл apiphp

    179
    Замена тегов через preg_replace

    Замена тегов через preg_replace

    Нужно удалить style="произвольный код;" из текста статьи, тегы вырезал (заменял) таким способом

    162
    Ошибка UserInfo={NSDebugDescription=Garbage at end.}

    Ошибка UserInfo={NSDebugDescription=Garbage at end.}

    Здравствуйте, возникла проблема при парсинге данных с php файлаПишет вот такую ошибку:

    219
    c++ float дробная часть

    c++ float дробная часть

    Как вывести число с дробной частью, потому что сейчас при вводе 1 просто округляется до 3? И соответственно при вводе 2 выводит 6

    333