Почему в одном случае индексы подмасок определены, а в другом нет?

preg_match( '#^(abc)|(def)$#ui', 'def', $matches );
$matches: Array ( [0] => def [1] => [2] => def )

preg_match( '#^(abc)|(?:def)$#ui', 'def', $matches );
$matches: Array ( [0] => def )

Почему в первом случае индекс 1 определен, а в втором случае нет? Какое здесь правило? Правильно понимаю, что если маска n была захвачена, то и все предыдущие незахваченные индексы будут определены, но равны null? Если же маска n не была захвачена, то и все предыдущие незахваченные не будут определены?
  • Вопрос задан
  • 74 просмотра
Пригласить эксперта
Ответы на вопрос 1
@Akela_wolf
Extreme Programmer
Добавление в маску ?: говорит о том что её захватывать не надо.
Соответственно первые скобки не захватываются потому что они не совпадают, вторые - потому что вы сами это запретили.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
30 апр. 2024, в 22:44
500 руб./в час
30 апр. 2024, в 21:45
20000 руб./за проект
30 апр. 2024, в 21:36
1500 руб./в час