【问题标题】:Explode string by one or more spaces or tabs用一个或多个空格或制表符分解字符串
【发布时间】:2010-12-20 01:27:33
【问题描述】:

如何将字符串分解为一个或多个空格或制表符?

例子:

A      B      C      D

我想把它变成一个数组。

【问题讨论】:

  • 零个或多个空格意味着每个元素最多有一个字符,或者您将有无限多个空元素。你确定这是你想要的吗?
  • 是的,应该是“一个或多个空格”。

标签: php regex explode


【解决方案1】:

为了占全宽空间比如

full width

您可以将 Bens 的答案扩展到此:

$searchValues = preg_split("@[\s+ ]@u", $searchString);

来源:

(我没有足够的声誉来发表评论,所以我写了这个作为答案。)

【讨论】:

    【解决方案2】:

    假设$string = "\tA\t B \tC \t D ";(制表符和空格的混合,包括前导制表符和尾随空格)

    显然,仅在空格或制表符上进行拆分是行不通的。 不要使用这些

    preg_split('~ +~', $string) // one or more literal spaces, allow empty elements
    preg_split('~ +~', $string, -1, PREG_SPLIT_NO_EMPTY) // one or more literal spaces, deny empty elements
    
    preg_split('~\t+~', $string) // one or more tabs, allow empty elements
    preg_split('~\t+~', $string, -1, PREG_SPLIT_NO_EMPTY) // one or more tabs, deny empty elements
    

    使用这些

    preg_split('~\s+~', $string) // one or more whitespace character, allow empty elements
    preg_split('~\s+~', $string, -1, PREG_SPLIT_NO_EMPTY), // one or more whitespace character, deny empty elements
    
    preg_split('~[\t ]+~', $string) // one or more tabs or spaces, allow empty elements
    preg_split('~[\t ]+~', $string, -1, PREG_SPLIT_NO_EMPTY)  // one or more tabs or spaces, allow empty elements
    
    preg_split('~\h+~', $string) // one or more horizontal whitespaces, allow empty elements
    preg_split('~\h+~', $string, -1, PREG_SPLIT_NO_EMPTY) // one or more horizontal whitespaces, deny empty elements
    

    demonstration of all techniques below can be found here

    参考Horizontal Whitespace

    【讨论】:

    • 这是第一个显示水平空格概念的答案。这是目前最正确的答案,因为该问题仅涉及制表符和空格。
    【解决方案3】:

    这行得通:

    $string = 'A   B C          D';
    $arr = preg_split('/\s+/', $string);
    

    【讨论】:

    • 在字符类中写入\s 没有任何好处。
    【解决方案4】:

    以制表符分隔:

    $comp = preg_split("/\t+/", $var);
    

    用空格/制表符/换行符分隔:

    $comp = preg_split('/\s+/', $var);
    

    仅用空格分隔:

    $comp = preg_split('/ +/', $var);

    【讨论】:

    • 要添加到这个需要至少两个空格的preg_split('/\s{2,}/', $var);
    • 在字符类中写入\t 没有任何好处。
    【解决方案5】:

    作者要求explode,你可以这样用explode

    $resultArray = explode("\t", $inputString);

    注意:你必须使用双引号,而不是单引号。

    【讨论】:

    • 为我工作,比使用正则表达式的黑暗力量简单一点。
    • 但他要求“空格或制表符”,而这只会在制表符中爆炸。
    • 我也是来这里寻找爆炸空间的。我对此深感悲痛。
    • 看到可证明不正确的答案被投票到社区无法删除的程度,我总是很难过。
    • 请更新以包含空格,以便回答问题。
    【解决方案6】:

    我想你想要preg_split:

    $input = "A  B C   D";
    $words = preg_split('/\s+/', $input);
    var_dump($words);
    

    【讨论】:

      【解决方案7】:

      不要使用explode,而是尝试preg_split:http://www.php.net/manual/en/function.preg-split.php

      【讨论】:

        【解决方案8】:
        $parts = preg_split('/\s+/', $str);
        

        【讨论】:

        • 可以使用:$parts = preg_split('/\s+/', $str, -1, PREG_SPLIT_NO_EMPTY);,而不是删除可能为空的最后一部分
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-07-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-01-06
        • 2019-05-13
        相关资源
        最近更新 更多