【问题标题】: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 匹配空格

标签: php regex preg-split


【解决方案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

    【讨论】:

    • 谢谢,我认为这是最简洁的语法
    猜你喜欢
    • 2023-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-22
    相关资源
    最近更新 更多