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

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(); 
}

关键说明

  1. 替换匹配函数:preg_match_all会遍历整个字符串,找到所有符合正则规则的匹配项,而preg_match只会返回第一个匹配结果,这是你无法获取所有标签的核心原因。
  2. 关于参数的调整:
    • 如果你不需要标签在字符串中的偏移位置,可以去掉PREG_OFFSET_CAPTURE参数,此时$matches[0]直接就是你期望的纯标签数组。
    • 如果确实需要位置信息,保留PREG_OFFSET_CAPTURE的话,$matches会是二维数组,每个元素是[标签文本, 偏移量]的结构,你可以通过array_column($matches[0], 0)提取出纯标签数组。
  3. 正则的有效性:你的正则/&lt;[^&gt;]*&gt;/可以正确匹配所有以&lt;开头、&gt;结尾的HTML实体标签,包括带属性的<a>标签和闭合标签,完全满足你的需求。

测试结果

调用teste()函数后,会输出你期望的数组:

Array
(
    [0] => &lt;div&gt;
    [1] => &lt;/div&gt;
    [2] => &lt;a href="test/test.com"&gt;
    [3] => &lt;/a&gt;
)

内容的提问来源于stack exchange,提问作者Vitor G. Delgallo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:34:58