如何使用PHP从HTML字符串中提取所有h2标题内容存入数组
问题排查与解决方案
错误原因
- 你编写的正则表达式没有添加PHP
preg_*系列函数要求的正则分隔符,PHP要求所有用于preg系列函数的正则必须首尾用相同的特殊符号(如/、~、#)包裹,这是代码未生效的核心原因。
适配不同场景的正确代码
场景1:确认h2标签无任何属性(纯<h2>开头)
preg_match_all('~<h2>(.*?)</h2>~i', $text, $found); // 提取到的h2标题数组为$found[1] $h2_title_array = $found[1]; print_r($h2_title_array);
参数说明:
- 首尾的
~是正则分隔符,避免和HTML的<>符号冲突不需要额外转义 - 末尾的
i是修正符,表示大小写不敏感,可同时匹配<h2>、<H2>等写法
场景2:h2标签可能带有class、id等属性(如<h2 class="title">xxx</h2>)
// <h2[^>]*> 匹配所有带任意属性的h2开标签 preg_match_all('~<h2[^>]*>(.*?)</h2>~i', $text, $found); $h2_title_array = $found[1]; print_r($h2_title_array);
特殊场景补充:h2内容包含换行
如果你的h2标签内的内容存在换行,需要在修正符中加s,让通配符.可以匹配换行符:
preg_match_all('~<h2[^>]*>(.*?)</h2>~is', $text, $found); $h2_title_array = $found[1];
内容的提问来源于stack exchange,提问作者coding_newbie
相关产品推荐
相关产品推荐

