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

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

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

)


Почему он находит x а y не находит?
  • Вопрос задан
  • 2240 просмотров
Пригласить эксперта
Ответы на вопрос 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"
  }
}
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы