Расчленить строку на один или несколько пробелов или табуляций

145

Как я могу разбить строку на один или несколько пробелов или табуляции?

Пример:

A      B      C      D

Я хочу сделать это массивом.

Дарт Вейдер
источник
ноль или более пробелов означает, что либо каждый элемент будет иметь не более одного символа, либо у вас будет бесконечно много пустых элементов. Вы уверены, что это то, что вам нужно?
bdonlan
Да, вероятно, это должно быть «одно или несколько пробелов».
Майкл Майерс

Ответы:

330
$parts = preg_split('/\s+/', $str);
Бен Джеймс
источник
5
Последний элемент $ parts будет пустым .. поэтому для его удаления array_pop ($ parts);
user889030 07
1
Ответ @lucsan должен быть лучшим ответом ( stackoverflow.com/a/38481324/1407491 )
Наби КАЗ
6
Вместо удаления последней части, которая может быть пустой, можно использовать:$parts = preg_split('/\s+/', $str, -1, PREG_SPLIT_NO_EMPTY);
Coing
50

Чтобы разделить вкладками:

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

Чтобы разделить пробелами / табуляцией / новой строкой:

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

Чтобы разделить только пробелами:

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

АлиАвчи
источник
23

Это работает:

$string = 'A   B C          D';
$arr = preg_split('/[\s]+/', $string);
Schneck
источник
21

Автор попросил взорвать, чтобы вы могли использовать взорвать вот так

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

Примечание: вы должны использовать двойные кавычки, а не одинарные.

Lucsan
источник
Сработало для меня, и это немного проще, чем использовать темную силу регулярных выражений.
Дэвид 'лысый имбирь'
8
Но он попросил «пробелы или табуляции», и это взрывается только для табуляции.
Джефф,
2
Я тоже пришел сюда в поисках взрывающихся пространств. Мне очень грустно из-за этого.
Серджио А.
10

Я думаю, вы хотите preg_split:

$input = "A  B C   D";
$words = preg_split('/\s+/', $input);
var_dump($words);
джеддинги
источник
3

Чтобы учесть пространство полной ширины, например

full width

вы можете расширить ответ Бенса на это:

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

Источники:

(У меня недостаточно репутации, чтобы оставлять комментарии, поэтому я написал это как ответ.)

MPS
источник
0

Ответы других людей (Бен Джеймс) весьма хороши, и я их использовал. Как указывает 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;   
}
Питер Шеффер
источник
-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);
    ?>

Тримбак Гопалгхаре
источник
-5

@OP это не имеет значения, вы можете просто разделить пространство с помощью explode. Пока вы не захотите использовать эти значения, перебирайте разнесенные значения и отбрасывайте пробелы.

$str = "A      B      C      D";
$s = explode(" ",$str);
foreach ($s as $a=>$b){    
    if ( trim($b) ) {
     print "using $b\n";
    }
}
призрачная собака74
источник
4
А как насчет значений, разделенных табуляцией?
dotancohen
Значения, разделенные табуляцией, не будут увеличены, так что тьфу.
NekojiruSou