使用preg_match_all仅提取开始和结束脚本标记

时间:2013-12-07 01:04:57

标签: php html regex

HTML:

<script type="text/javascript"> ..code.. </script>
<script type="text/javascript"> ..code.. </script>
<script> ..code.. </script>
<script type="text/javascript"> ..code.. </script>

我想看到的内容:

<script type="text/javascript"></script>
<script type="text/javascript"></script>
<script></script>
<script type="text/javascript"></script>

我的表情:

preg_match_all('/<script.*> (<\/script>)/i',$html, $result);

我无法让它发挥作用。

2 个答案:

答案 0 :(得分:0)

来自Here

function stripscript($code) {
  $code = preg_replace('/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/i', '<script type="text/javascript"></script>', $code);
  return $code;
}

键盘示例:here

答案 1 :(得分:0)

您可以使用:

$html = preg_replace('~<script[^>]*>\K[^<]*(?=</script>)~i', '', $html);

或更多表演:

$html = preg_replace('~<script[^>]*+>\K[^<]*+(?=</script>)~i', '', $html);

请注意,如果您确定小写,则可以删除i

\K从匹配结果重置匹配的开始。

(?=</script>)是零宽度断言,表示“后跟{{1 }}”。这不是比赛结果的一部分。这只是一张支票。