Задать вопрос

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

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 не была захвачена, то и все предыдущие незахваченные не будут определены?
  • Вопрос задан
  • 76 просмотров
Подписаться 1 Простой Комментировать
Помогут разобраться в теме Все курсы
  • Skillfactory
    Профессия Fullstack веб-разработчик на JavaScript и PHP
    20 месяцев
    Далее
  • Хекслет
    PHP-разработчик
    10 месяцев
    Далее
  • Нетология
    Веб-разработчик с нуля: профессия с выбором специализации
    14 месяцев
    Далее
Пригласить эксперта
Ответы на вопрос 1
@Akela_wolf
Extreme Programmer
Добавление в маску ?: говорит о том что её захватывать не надо.
Соответственно первые скобки не захватываются потому что они не совпадают, вторые - потому что вы сами это запретили.
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы