PHP中脚本标记的正则表达式

时间:2012-06-25 09:41:42

标签: php regex

我正在使用正则表达式来获取html页面的所有脚本标记的内容。 我使用的正则表达式和代码就像:

$content = file_get_contents($url, false, stream_context_create(
                    array("http" => array("user_agent" => "any"))
            ));

$pattern = "/<script[^>]*?>([\s\S]*?)<\/script>/";
preg_match_all($pattern, $content, $inside_script_array);

echo "<pre>";
print_r($inside_script_array);
echo "</pre>";

当我选择1.&gt;

$url = 'http://www.bestylish.com/' ;

它返回所有脚本标记。但是当我选择2.&gt;

$url = 'http://www.bestylish.com/sale' ;

它没有回复我很多标签,它们是相同的,并且存在于上面的网址1中。应该是什么原因?

1 个答案:

答案 0 :(得分:4)

原因是正则表达式不是操纵HTML的好工具。如果您仍然可以选择切换到DOM解析器,则提取<script>标记可以简单如下:

$domd = new DOMDocument();
libxml_use_internal_errors(true);
$domd->loadHTML(file_get_contents('http://www.google.com'));
libxml_use_internal_errors(false);

$items = $domd->getElementsByTagName('script');
$data = array();

foreach($items as $item) {
  $data[] = array(
    'src' => $item->getAttribute('src'),
    'outerHTML' => $domd->saveHTML($item),
    'innerHTML' => $domd->saveHTML($item->firstChild),
  );
}

print_r($data);