【发布时间】:2014-05-22 16:16:22
【问题描述】:
我正在尝试提取网页中的所有元标记,目前正在使用 preg_match_all 来获取它,但不幸的是它为数组索引返回了一个空字符串。
<?php
$meta_tag_pattern = '/<meta(?:"[^"]*"[\'"]*|\'[^\']*\'[\'"]*|[^\'">])+>/';
$meta_url = file_get_contents('test.html');
if(preg_match_all($meta_tag_pattern, $meta_url, $matches) == 1)
echo "there is a match <br>";
print_r($matches);
?>
返回数组:
Array ( [0] => Array ( [0] => [1] => [2] => [3] => ) ) Array ( [0] => Array ( [0] => [1] => [2] => [3] => ) )
【问题讨论】:
-
由于
preg_match_all返回匹配的数量,我建议你只写:if(preg_match_all($meta_tag_pattern, $meta_url, $matches) )或者如果你正在寻找第一个结果,使用preg_match。 -
使用DOMDocument更容易得到你想要的结果。
-
这就是我如何捕获元标记 /
]+>/ 。你想捕捉什么?整个标签?属性?属性值? -
@CasimiretHippolyte 我认为这可能是我的代码中的逻辑错误,所以我尝试了
writeif 语句的其他方法。我正在寻找一种性能方式来解析页面,这种方式我没有使用DOMDocument。 -
添加
i标志,即不区分大小写。检查源 html 代码以确保您来自print_r的代码未被浏览器解析为 HTML 代码。
标签: php arrays tags preg-match-all