Я пытаюсь получить информацию из этого массива, но по какой-то причине он вложен все в $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] содержит массив строк, захваченных вашим регулярным выражением.