如何在PHP中使用preg_match_all从字符串返回JavaScript?

时间:2019-03-19 00:41:55

标签: php regex preg-match-all

我想使用preg_match_all从字符串中读取所有JavaScript。

$pattern = '~<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>~su';
$success = preg_match_all($pattern, $str, $matches, PREG_SET_ORDER);

array(0 => '<script>alert("Hallo Welt 1");</script>');

结果现在也包含脚本标记。 我想排除此标签。

带有示例代码的我的示例Online Regex

1 个答案:

答案 0 :(得分:1)

Regex 是解析XML / HTML的错误工具。您应该改为使用DOM解析器。 XPath表达式是专门用于解析DOM结构的语言。

$html = <<<_EOS_
<script>alert("Hallo Welt 1");</script>
<div>Hallo Welt</div>
<script type ="text/javascript">alert("Hallo Welt 2");</script>
<div>Hallo Welt 2</div>
<script type ="text/javascript">
              alert("Hallo Welt 2");
</script>
_EOS_;

$doc = new DOMDocument();
$doc->loadHTML("<!DOCTYPE html><html>$html</html>");
$xpath = new DOMXPath($doc);
$scripts = $xpath->query('//script/text()');

foreach ($scripts as $script)
  var_dump($script->data);