我想使用preg_match_all()
函数来解析html页面并获取所有关键字和描述元标记内容,但我不能为此操作编写正则表达式,请帮助我
答案 0 :(得分:1)
尝试
\<meta\s*name="(\w*)"\s*content="(.*)"
(编辑:根据georg的建议更改)。
这将在一个数组中分别捕获属性的名称和内容。
函数调用看起来应该是这样的。
preg_match_all("/\<meta.name="(\w*)".content="(.*)"/", $input_lines, $output_array);
输出看起来像这样
Array
(
[0] => Array
(
[0] => <meta name="description" content="Free Web tutorials"
[1] => <meta name="keywords" content="HTML,CSS,XML,JavaScript"
[2] => <meta name="author" content="Hege Refsnes"
)
[1] => Array
(
[0] => description
[1] => keywords
[2] => author
)
[2] => Array
(
[0] => Free Web tutorials
[1] => HTML,CSS,XML,JavaScript
[2] => Hege Refsnes
)
)
答案 1 :(得分:1)
使用解析器:
$DOM = new DOMDocument;
$DOM->loadHTML($your_html);
$nodes = $DOM->getElementsByTagName('meta');
$metas = array();
foreach($nodes as $node)
$metas[strtolower($node->getAttribute('name'))] = $node->getAttribute('content');
print_r($metas);
另一种选择是get_meta_tags,但它至少在两个方面被打破了:
因此,请坚持使用DOM解析器,或使用this reference中列出的其他方法。