如何用逗号分割不跟空格的字符串?

Posted

技术标签:

【中文标题】如何用逗号分割不跟空格的字符串?【英文标题】:How to split a string on comma that is NOT followed by a space? 【发布时间】:2014-08-09 05:20:00 【问题描述】:

我希望结果是:

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 匹配空格 【参考方案1】:

您可以使用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
)

【讨论】:

@JayDansand:实际上是result inTest, Example 啊,你说得对,这就是我通过略读得到的。撤回! @JayDansand:虽然我不确定这是否是 OP 期望的输出。我想我会保持原样。谢谢,顺便说一句:)【参考方案2】:

如果您想按一个字符分割,但又想忽略该字符以防它被转义,请使用后向断言。

在本例中,字符串将被“:”分割,但“\:”将被忽略:

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

结果成:

数组 ( [0] => 一个 [1] => b [2] => c\:d )

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

【讨论】:

【参考方案3】:

split() 函数已被弃用,所以我改用 preg_split。

这就是你想要的:

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

这使用 ?!表示我们希望仅在后面没有分组序列时才以逗号分隔。

由于 preg_split 使用 Perl 正则表达式,所以我在操作符上链接了 Perl 文档:

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

【讨论】:

谢谢,我认为这是最简洁的语法

以上是关于如何用逗号分割不跟空格的字符串?的主要内容,如果未能解决你的问题,请参考以下文章

如何用逗号而不是空格分割列表

如何用括号外的逗号分割字符串?

如何用逗号分割字符串而不在perl的引号内包含逗号?

JAVA 如何用部分空格分割字符串,急!

如何用空格分割字符串,不包括Python中双引号之间的空格? [复制]

java中如何用split对一个字符串按逗号和分号分割成数组