You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让preg_match_all正确匹配每个独立的<script>标签内容?

解决正则匹配多个script标签的问题

你的问题出在正则里的.*是贪婪匹配,它会抓取最长的符合规则的内容,所以从第一个<script>直接匹配到最后一个</script>,把两个标签的内容全部包含进去了。

修正方案

把.*换成.*?(非贪婪匹配),同时如果script标签内的内容包含换行符,需要添加s修饰符让.能匹配换行。修正后的代码如下:

preg_match_all('/<script>(.*?)<\/script>/s', $matches[0], $page_script);

原理说明

  • .*?是非贪婪匹配,会在找到第一个</script>时就停止当前匹配,从而分别捕获每个独立的script标签内容。
  • s修饰符可以让正则中的.匹配换行符,避免script内容存在换行时出现匹配不全的情况。

执行修正后的代码后,$page_script[0]会得到你期望的结果:

[
   0 => "<script>some_script_data</script>",
   1 => "<script>some_more_script_data</script>"
]

额外提示

如果只需要提取script标签内的文本内容,直接访问$page_script[1]即可,它会包含some_script_data和some_more_script_data两个值。

内容的提问来源于stack exchange,提问作者Toma Tomov

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 14:01:02