2016-07-23 2 views
-1

Давайте предположим, что у меня есть этот код ниже:Split все HTML-теги в массив

<!DOCTYPE html> 
<html> 
<head> 
<meta charset="UTF-8"> 
<title>Title of the document</title> 
</head>  
<body> 
<div id="x">Hello</div> 
<p>world</p> 
<h1>my name</h1> 
</body> 
</html> 

И мне нужно, чтобы извлечь все HTML-теги и поместить в массив, например:

'0' => '<!DOCTYPE html>', 
'1' => '<html>', 
'2' => '<head>', 
'3' => '<meta charset="UTF-8">', 
'4' => '<title>Title of the document</title>', 
'5' => '</head>', 
'6' => '<body>', 
'7' => '<div id="x">Hello</div>', 
'8' => '<p>world</p>', 
'9' => '<h1>my name</h1>', 
.... 

в моем случае мне не нужно получать весь существующий контент внутри тега, потому что только улавливать начало каждого тега было уже очень хорошо.

Как я могу это сделать?

ответ

2

Используйте следующее решение с preg_match_all функции:

$html_content = '<!DOCTYPE html> 
<html> 
<head> 
<meta charset="UTF-8"> 
<title>Title of the document</title> 
</head>  
<body> 
<div id="x">Hello</div> 
<p>world</p> 
<h1>my name</h1> 
</body> 
</html>'; 

preg_match_all("/\<\w[^<>]*?\>([^<>]+?\<\/\w+?\>)?|\<\/\w+?\>/i", $html_content, $matches); 
// <!DOCTYPE html> is standardized document type definition and is not a tag 

print_r($matches[0]); 

Выход:

Array 
(
    [0] => <html> 
    [1] => <head> 
    [2] => <meta charset="UTF-8"> 
    [3] => <title>Title of the document</title> 
    [4] => </head> 
    [5] => <body> 
    [6] => <div id="x">Hello</div> 
    [7] => <p>world</p> 
    [8] => <h1>my name</h1> 
    [9] => </body> 
    [10] => </html> 
)