1

我正在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结果中包含命名组。如何避免将匹配项也保存为索引组?

4

1 回答 1

1

使用preg_match()本地不可能做到这一点 - 因为它实现了 PCRE,而这不能由 PCRE 完成。

最简单的方法就是处理输出数组:

foreach($matches as $key=>$match)
{
   if(is_int($key))
   {
      unset($matches[$key]);
   }
}
于 2013-10-28T12:05:58.040 回答