Получить значение аттрибута из HTML строки

292
25 января 2017, 01:02

Имеется строка

<div class="value1 666"></div>

Как с помощью PHP и Regex получить массив из двух значений value1 и 666 ?

Мое текущее решение:

    $regex = "/(?:.*class[ ]*=[ ]*[\"\'])(.*)(?:[\"\'].*)/";
    $html = "<div class='value1 666'></div>";
    preg_match_all($regex, $html, $results);
    var_dump($results);

Имеет след недостатки :

  • в массиве $results первое значение всегда входная строка
  • коректно работает только если у атрибута задано одно значение
Answer 1
preg_match_all("/class\s*=\s*[\"']([^\"'\s]*)\s*([^\"'\s]*)[\"']/", $input, $output);

Искомые данные будут содержаться в $output[1] и $output[2]:

preg_match_all("/class\s*=\s*[\"']([^\"'\s]*)\s*([^\"'\s]*)[\"']/", 
"<div class='value1 666'></div><div class='value2 333'></div>", $output);
var_dump($output[1]):
    array(
        0   =>  value1
        1   =>  value2
    )
var_dump($output[2]):
    array(
        0   =>  666
        1   =>  333
    )

Онлайн тест выражения

Answer 2

Для парсинга html воспользуйтесь готовой библиотекой, к примеру phpQuery https://github.com/punkave/phpQuery

$doc = phpQuery::newDocument('<div class="value1 666"></div>');
$divs = $document->find('div');
$result = array();
foreach ($divs as $_div) {
    $class = pq($_div)->attr('class');
    $result[] = explode(' ', $class);
}
var_dump($result);

regexp - формальный язык поиска и осуществления манипуляций с подстроками в тексте. А не парсер чего либо...

READ ALSO
Пагинация при query_posts

Пагинация при query_posts

Сайт на WordpressЕсть код:

309
Передача данных в iframe

Передача данных в iframe

Есть страница, на странице iframe, в src iframe url SPA-приложения на Vuejs 2

1107
Отображение obj/stl объектов

Отображение obj/stl объектов

Здравствуйте,пишу отображение obj/stl объектов на сайте,вот полный код https://jsfiddlenet/pvaLv4Ln/

336