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

使用preg_match_all时如何仅获取捕获组Array[1]而非完整匹配Array[0]

问题原因

preg_match_all 函数默认采用 PREG_PATTERN_ORDER 模式,会把整个正则匹配到的完整字符串存进结果数组的[0]索引,正则里定义的**捕获组(括号内的内容)**则会依次存入[1]、[2]等后续索引。你看到的Array[0]是函数正常输出的完整匹配项,并非代码错误,而你需要的内容本来就存在Array[1]里。

解决方法

方法1:直接提取目标数组索引

这是最直接的方式,直接调用结果数组的[1]索引即可:

<?php
$string='afdsfd data-win="3453453ASSS" some text data-win="3434534ASDDD" some more text data-win="1233RTYYY"';
preg_match_all('/data-win="([^"]+)"/', $string, $matches);
// 直接输出捕获组的结果
print_r($matches[1]);
?>

运行输出:

Array (
    [0] => 3453453ASSS
    [1] => 3434534ASDDD
    [2] => 1233RTYYY
)

方法2:调整匹配模式(按需使用)

如果需要按单个匹配项组织结果,可以给preg_match_all添加第三个参数PREG_SET_ORDER,再提取每个匹配里的捕获组:

<?php
$string='afdsfd data-win="3453453ASSS" some text data-win="3434534ASDDD" some more text data-win="1233RTYYY"';
preg_match_all('/data-win="([^"]+)"/', $string, $matches, PREG_SET_ORDER);
// 提取所有匹配的捕获组内容
$targetResults = array_column($matches, 1);
print_r($targetResults);
?>

这种方式适合需要同时处理完整匹配和捕获组的场景,最终输出和方法1一致。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 01:32:01