子表达式(正则表达式)的无限匹配仅返回一个匹配项

str*_*ger 2 php regex

我有一个像这样的正则表达式(非常简化):

^(ab)*$
Run Code Online (Sandbox Code Playgroud)

并与此匹配:

abababababababab
Run Code Online (Sandbox Code Playgroud)

当我运行它时preg_match

preg_match('/$(ab)*$/', 'abababababababab', $matches);
print_r($matches);
Run Code Online (Sandbox Code Playgroud)

我明白了:

Array
(
    [0] => abababababababab
    [1] => ab
)
Run Code Online (Sandbox Code Playgroud)

而我期望的是:

Array
(
    [0] => abababababababab
    [1] => ab
    [2] => ab
    [3] => ab
    [4] => ab
    [5] => ab
    [6] => ab
    [7] => ab
    [8] => ab
}
Run Code Online (Sandbox Code Playgroud)

我怎样才能得到我所期望的?

(请注意,子表达式可能更复杂,例如([aA][bB]),并且我希望匹配的表达式按主题中的顺序排列。)

Eva*_*ark 5

preg_match_all通过像这样使用来做到这一点:

preg_match_all('/(ab)/', 'abababababababab', $matches);
print_r($matches);
Run Code Online (Sandbox Code Playgroud)

请记住,preg_match仅提供第一个匹配项并且preg_match_all具有相同的功能,但返回所有匹配项。另请注意,现在正则表达式已更改。如果您使用星号,它可能会在第一次匹配时消耗整个字符串。但是,您可以尝试类似的方法(ab)*?使其变得非贪婪。