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 не была захвачена, то и все предыдущие незахваченные не будут определены?