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


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);



21

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

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

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


Сработало для меня, и это немного проще, чем использовать темную силу регулярных выражений.
Дэвид 'лысый имбирь'

8
Но он попросил «пробелы или табуляции», и это взрывается только для табуляции.
Джефф,

2
Я тоже пришел сюда в поисках взрывающихся пространств. Мне очень грустно из-за этого.
Серджио А.



3

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

full width

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

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

Источники:

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


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";
    }
}

4
А как насчет значений, разделенных табуляцией?
dotancohen

Значения, разделенные табуляцией, не будут увеличены, так что тьфу.
NekojiruSou
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.