为什么此 RegEx 在 PHP 中不起作用?

Why this RegEx is not working in PHP?

首先,我知道我可以用 explode 得到完全相同的结果,只是想知道为什么它在 PHP

中不起作用
preg_split('/(.+,)+(.+)/im', 'New York, NY, United States');

它returns

array (
  0 => '',
  1 => '',
)

为什么?应该 returns: ['New York, NY, ', 'United States'] 对吧?

你实际上是在匹配你想要的东西,而不是你想用来分割的东西:

preg_match('/(.*,)+ (.*)/', $subject, $result);

会得到 $result

中的匹配项

注意:我添加了一个space并删除了多行修饰符,在你的情况下不需要。

如果要使用preg split,需要使用negative lookahead得到最后一个,:

preg_split('/(,)(?!.*,)/i', 'New York, NY, United States');

使用 preg_split 你可以: preg_split("/,\s/", 'New York, NY, United States');

此函数需要分隔符的模式。

为了获得数组:['New York, NY, ', 'United States'],删除第二个量词并使用 preg_match 代替:

preg_match('/^(.+,)(.+?)$/im', 'New York, NY, United States', $match);