我有一个像这样的正则表达式(非常简化):
^(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]),并且我希望匹配的表达式按主题中的顺序排列。)
preg_match_all通过像这样使用来做到这一点:
preg_match_all('/(ab)/', 'abababababababab', $matches);
print_r($matches);
Run Code Online (Sandbox Code Playgroud)
请记住,preg_match仅提供第一个匹配项并且preg_match_all具有相同的功能,但返回所有匹配项。另请注意,现在正则表达式已更改。如果您使用星号,它可能会在第一次匹配时消耗整个字符串。但是,您可以尝试类似的方法(ab)*?使其变得非贪婪。