У меня есть регулярное выражение, подобное этому (очень упрощенное):
^(ab)*$
И я согласен с этим:
abababababababab
Когда я запускаю его через preg_match
:
preg_match('/$(ab)*$/', 'abababababababab', $matches); print_r($matches);
Я получаю это:
Array ( [0] => abababababababab [1] => ab )
Я ожидаю этого:
Array ( [0] => abababababababab [1] => ab [2] => ab [3] => ab [4] => ab [5] => ab [6] => ab [7] => ab [8] => ab }
Как я могу получить то, что ожидаю?
(Обратите внимание, что подвыражение может быть более сложным, например ([aA][bB])
, и я хочу, чтобы совпадающие выражения находились в их порядке в теме.)
Сделайте это, используя preg_match_all
следующим образом:
preg_match_all('/(ab)/', 'abababababababab', $matches); print_r($matches);
Помните, что preg_match
предоставляет только первое совпадение и что preg_match_all
имеет ту же функциональность, но возвращает все. Также обратите внимание, что теперь регулярное выражение изменилось. Если вы используете звездочку, она, вероятно, будет потреблять всю строку в первом совпадении. Вы могли бы, однако, попробовать что-то вроде (ab)*?
чтобы сделать его неразборчивым.