PHP正则提取HTML标签:无法将所有标签存入数组的问题
解决PHP正则提取所有HTML标签的问题
嘿,我看到你遇到的问题了——用preg_match只能抓到第一个HTML标签,没法把所有目标标签都存入数组对吧?这是因为preg_match默认只会匹配一次字符串中的第一个符合规则的内容,要提取所有匹配项,你需要换成preg_match_all函数,你的正则表达式本身是没问题的,只是匹配函数用错了~
修改后的代码
function teste(){ $string = '<div>Hello, i am João</div><a href="test/test.com">testttttttttttt</a>'; $matches = array(); // 替换preg_match为preg_match_all,同时调整参数获取纯标签数组 preg_match_all('/<[^>]*>/', $string, $matches); // $matches[0]就是所有标签组成的数组 print_r($matches[0]); exit(); }
关键说明
- 替换匹配函数:
preg_match_all会遍历整个字符串,找到所有符合正则规则的匹配项,而preg_match只会返回第一个匹配结果,这是你无法获取所有标签的核心原因。 - 关于参数的调整:
- 如果你不需要标签在字符串中的偏移位置,可以去掉
PREG_OFFSET_CAPTURE参数,此时$matches[0]直接就是你期望的纯标签数组。 - 如果确实需要位置信息,保留
PREG_OFFSET_CAPTURE的话,$matches会是二维数组,每个元素是[标签文本, 偏移量]的结构,你可以通过array_column($matches[0], 0)提取出纯标签数组。
- 如果你不需要标签在字符串中的偏移位置,可以去掉
- 正则的有效性:你的正则
/<[^>]*>/可以正确匹配所有以<开头、>结尾的HTML实体标签,包括带属性的<a>标签和闭合标签,完全满足你的需求。
测试结果
调用teste()函数后,会输出你期望的数组:
Array ( [0] => <div> [1] => </div> [2] => <a href="test/test.com"> [3] => </a> )
内容的提问来源于stack exchange,提问作者Vitor G. Delgallo
相关产品推荐
相关产品推荐

