如何在没有后跟空格的逗号上拆分字符串?

时间:2014-06-18 19:25:11

标签: php regex preg-split

我希望结果为:

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
)

3 个答案:

答案 0 :(得分:3)

您可以使用negative lookahead来实现此目的:

,(?!\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
)

答案 1 :(得分:2)

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

答案 2 :(得分:0)

如果你想用char分割,但想要在转义时忽略该char,请使用lookbehind断言。

在此示例中,字符串将被"分开:"但" \:"将被忽略:

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

结果:

阵 (     [0] =&gt;一个     [1] =&gt; b     [2] =&gt;光盘 )

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