Бесконечное соответствие подвыражений (регулярных выражений) возвращает только одно совпадение

У меня есть регулярное выражение, подобное этому (очень упрощенное):

^(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)*? чтобы сделать его неразборчивым.