Preg_match_all возвращающий массив в массиве?

Я пытаюсь получить информацию из этого массива, но по какой-то причине он вложен все в $matches[0] .

 <? $file = shell_exec('pdf2txt.py docs/April.pdf'); preg_match_all('/.../',$file,&$matches); print_r($matches) ?> 

Это работает так, как предполагалось? Есть ли способ разместить это в массиве глубины 1?

РЕДАКТИРОВАТЬ:

Это RegEx:

 ([AZ][az]+\s){1,5}\s?[^a-zA-Z\d\s:,.\'\"]\s?[A-Za-z+\W]+\s[\d]{1,2}\s[AZ][az]+\s[\d]{4} 

preg_match_all() всегда возвращает массив (в случае успеха, иначе вы получаете пустой массив), где индекс 0 содержит массив с элементом для каждого целого совпадения, а остальные индексы становятся группами захвата с внутренним массивом для каждого совпадения.

Это может быть проще понять …

 array(2) { [0]=> array(2) { [0]=> string(12) "entire match" [1]=> string(32) "entire match matched second time" } [1]=> array(2) { [0]=> string(15) "capturing group" [1]=> string(35) "capturing group matched second time" } } 

Если ваша цель состоит в том, чтобы получить только захваченных персонажей (что было захвачено вашим »([AZ] [az] + \ s) {1,5}"), вы должны заглянуть внутрь $ matches [1]. $ matches [1] [0] содержит первую записанную последовательность символов.

В документах preg_match_all , если не указан флаг заказа (как в вашем примере), предполагается PREG_PATTERN_ORDER. Используя этот шаблон, вы обнаружите, что $ matches [0] – это массив, который содержит все строки, которые соответствуют вашему полному шаблону, а $ matches [1] содержит массив строк, захваченных вашим регулярным выражением.