如何用逗号分割不跟空格的字符串?
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
【讨论】:
谢谢,我认为这是最简洁的语法以上是关于如何用逗号分割不跟空格的字符串?的主要内容,如果未能解决你的问题,请参考以下文章