我正在使用命名捕获组进行preg_match
。当我打印出$matches
时,它显示了命名组,但也显示了默认的索引组,如下所示:
Array
(
[0] => placeholder/placeholder2
[p1] => placeholder <-- Named, good
[1] => placeholder <-- Indexed, don't want this
[p2] => placeholder2 <-- Named, good
[2] => placeholder2 <-- Indexed, don't want this
)
使用这段代码:
$str = 'placeholder/placeholder2';
preg_match('#(?P<p1>[[:alnum:]]+)/(?P<p2>[[:alnum:]]+)#', $str, $matches);
echo '<pre>';
print_r($matches);
echo '</pre>';
我只希望在$matches
结果中包含已命名的组。如何避免将匹配保存为索引组?
答案 0 :(得分:1)
使用preg_match()本身是不可能的 - 因为它实现了PCRE,PCRE无法做到这一点。
最简单的方法就是处理输出数组:
foreach($matches as $key=>$match)
{
if(is_int($key))
{
unset($matches[$key]);
}
}