如何分割逗号上的字符串,后面没有空格


How to split a string on comma that is NOT followed by a space?

我想要的结果是:

Cats, Felines & Cougars    
Dogs    
Snakes

这是我能得到的最接近的。

$string = "Cats, Felines & Cougars,Dogs,Snakes";
$result = split(',[^ ]', $string);
print_r($result);

结果是

Array
(
    [0] => Cats, Felines & Cougars
    [1] => ogs
    [2] => nakes
)

您可以使用反向向前看来实现这一点:

,(?!'s)

在简单的英语中,上面的正则表达式表示匹配所有逗号,如果后面没有空格('s),则只匹配

在PHP中,可以与preg_split()一起使用,如下所示:

$string = "Cats, Felines & Cougars,Dogs,Snakes";
$result = preg_split('/,(?!'s)/', $string);
print_r($result);
输出:

Array
(
    [0] => Cats, Felines & Cougars
    [1] => Dogs
    [2] => Snakes
)

split()函数已被弃用,所以我使用preg_split代替。

这是你想要的:

$string = "Cats, Felines & Cougars,Dogs,Snakes";
$result = preg_split('/,(?! )/', $string);
print_r($result);

使用?!表示仅当后面没有分组序列时,我们希望在逗号上进行分割。

我链接了关于操作符的Perl文档,因为preg_split使用Perl正则表达式:

http://perldoc.perl.org/perlre.html Look-Around-Assertions

如果您想按一个字符进行分割,但又想在该字符被转义时忽略该字符,请使用向后看断言。

在这个例子中,字符串将被":"分割,但"':"将被忽略:

<?php
$string='a:b:c':d';
$array=preg_split('#(?<!''')':#',$string);
print_r($array);
?>

结果为:

数组([0] => a[1] => b[2] => c':d)

http://www.php.net//manual/en/function.preg-split.php