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

Почему не все подстроки возвращаются?

Регулярка: /(x|y).*?x/
Строка: "x y x"
Результат:
Array
(
    [0] => Array
        (
            [0] => x y x
        )

    [1] => Array
        (
            [0] => x
        )

)


Почему он находит x а y не находит?
  • Вопрос задан
  • 2241 просмотр
Подписаться 1 Оценить Комментировать
Помогут разобраться в теме Все курсы
  • Stepik
    Регулярные выражения в Python
    1 неделя
    Далее
  • Хекслет
    Java-разработчик
    10 месяцев
    Далее
  • Учебный центр IBS
    RT-001 Эксплуатация RT.DataLake
    1 неделя
    Далее
Пригласить эксперта
Ответы на вопрос 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
(x|y).*?x - найти x или y, за ним произвольный набор символов, до первого встреченного x. Первая попадающая под маску комбинация - 'x y x', следующий поиск начнётся после этой подстроки.
Если хотите найти все варианты вхождения, то используйте preg_match_all и просмотр вперёд:
preg_match_all('/(x|y)(?=.*?x)/', 'x y x', $match);
var_dump($match);

array(2) {
  [0]=>
  array(2) {
    [0]=>
    string(1) "x"
    [1]=>
    string(1) "y"
  }
  [1]=>
  array(2) {
    [0]=>
    string(1) "x"
    [1]=>
    string(1) "y"
  }
}
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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