正则表达式获取所有关键字和描述元标记内容

时间:2014-08-15 09:50:54

标签: php regex

我想使用preg_match_all()函数来解析html页面并获取所有关键字和描述元标记内容,但我不能为此操作编写正则表达式,请帮助我

2 个答案:

答案 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中列出的其他方法。