使用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
相关产品推荐
相关产品推荐

