Извлечение HTML-атрибутов в PHP с регулярным выражением

Я хочу получить атрибуты HTML из строки с PHP, но не с:

$string = '<ul id="value" name="Bob" custom-tag="customData">'; preg_filter("/(\w[-\w]*)=\"(.*?)\"/", '$1', $string ); // returns "<ul id name custom-tag" preg_filter("/(\w[-\w]*)=\"(.*?)\"/", '$1', $string ); // returns "<ul value Bob customData" 

Я хочу вернуться:

 array( 'id' => 'value', 'name' => 'Bob', 'custom-tag' => 'customData' ); 

Related of "Извлечение HTML-атрибутов в PHP с регулярным выражением"

HTML не является обычным языком и не может быть правильно проанализирован регулярным выражением. Вместо этого используйте парсер DOM. Вот решение, использующее встроенный класс DOMDocument :

 $string = '<ul id="value" name="Bob" custom-tag="customData">'; $dom = new DOMDocument(); $dom->loadHTML($string); $result = array(); $ul = $dom->getElementsByTagName('ul')->item(0); if ($ul->hasAttributes()) { foreach ($ul->attributes as $attr) { $name = $attr->nodeName; $value = $attr->nodeValue; $result[$name] = $value; } } print_r($result); 

Вывод:

 Array ( [id] => value [name] => Bob [custom-tag] => customData ) 

Не использовать регулярные выражения для анализа HTML

 $string = '<ul id="value" name="Bob" custom-tag="customData">'; $dom = new DOMDocument(); @$dom->loadHTML($string); $ul = $dom->getElementsByTagName('ul')->item(0); echo $ul->getAttribute("id"); echo $ul->getAttribute("name"); echo $ul->getAttribute("custom-tag");