使用正则表达式在 PHP 中提取 HTML 属性

Szy*_*oda 1 html php regex

我想用 PHP 从字符串中获取 HTML 属性但失败:

$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"
Run Code Online (Sandbox Code Playgroud)

我想返回的是:

array(
  'id' => 'value',
  'name' => 'Bob',
  'custom-tag' => 'customData'
);
Run Code Online (Sandbox Code Playgroud)

Joh*_*nde 5

不要使用正则表达式来解析 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");
Run Code Online (Sandbox Code Playgroud)


Ama*_*ali 5

HTML 不是常规语言,无法使用正则表达式正确解析。请改用 DOM 解析器。这是使用 PHP 内置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);
Run Code Online (Sandbox Code Playgroud)

输出:

Array
(
    [id] => value
    [name] => Bob
    [custom-tag] => customData
)
Run Code Online (Sandbox Code Playgroud)