通过一个或多个空格或制表符分解字符串

时间:2009-11-24 21:12:58

标签: php regex explode

如何通过一个或多个空格或制表符爆炸字符串?

示例:

A      B      C      D

我想把它变成一个数组。

11 个答案:

答案 0 :(得分:289)

$parts = preg_split('/\s+/', $str);

答案 1 :(得分:47)

要按标签分隔:

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

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

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

单独用空格分开:

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

答案 2 :(得分:22)

这有效:

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

答案 3 :(得分:17)

作者要求爆炸,你可以使用像这样的爆炸

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

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

答案 4 :(得分:10)

我想你想要preg_split

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

答案 5 :(得分:6)

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

答案 6 :(得分:2)

为了占据全宽空间,例如

full width

你可以将Bens的答案扩展到:

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

来源:

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

答案 7 :(得分:1)

假设 $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

A demonstration of all techniques below can be found here

参考Horizontal Whitespace

答案 8 :(得分:0)

其他人(Ben James)提供的答案非常好,我已经使用过它们。当user889030指出时,最后一个数组元素可能为空。实际上,第一个和最后一个数组元素可以为空。以下代码解决了这两个问题。

# Split an input string into an array of substrings using any set
# whitespace characters
function explode_whitespace($str) {  
  # Split the input string into an array
  $parts = preg_split('/\s+/', $str);
  # Get the size of the array of substrings
  $sizeParts = sizeof($parts);
  # Check if the last element of the array is a zero-length string
  if ($sizeParts > 0) {
    $lastPart = $parts[$sizeParts-1];
    if ($lastPart == '') {
      array_pop($parts);
      $sizeParts--;
    }
    # Check if the first element of the array is a zero-length string
    if ($sizeParts > 0) {
      $firstPart = $parts[0];
      if ($firstPart == '') 
        array_shift($parts); 
    }
  }
  return $parts;   
}

答案 9 :(得分:-2)

Explode string by one or more spaces or tabs in php example as follow: 

   <?php 
       $str = "test1 test2   test3        test4"; 
       $result = preg_split('/[\s]+/', $str);
       var_dump($result);  
    ?>

   /** To seperate by spaces alone: **/
    <?php
      $string = "p q r s t";   
      $res = preg_split('/ +/', $string);
      var_dump($res);
    ?>

答案 10 :(得分:-5)

@OP没关系,你可以在爆炸的空间上拆分。在您想要使用这些值之前,请迭代爆炸值并丢弃空白。

$str = "A      B      C      D";
$s = explode(" ",$str);
foreach ($s as $a=>$b){    
    if ( trim($b) ) {
     print "using $b\n";
    }
}