Вибухнути рядок на одному або декількох пробілах чи вкладках


141

Як я можу підірвати рядок на одному чи кількох пробілах чи вкладках?

Приклад:

A      B      C      D

Я хочу зробити це масивом.


нульовий або більше пробілів означає, що або кожен елемент матиме максимум один символ, або що у вас буде нескінченно багато порожніх елементів. Ви впевнені, що саме цього ви хочете?
bdonlan

Так, це, мабуть, має бути "один або кілька пробілів".
Майкл Майерс

Відповіді:


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

5
Останній елемент $ parts буде порожнім .. тому видаліть його array_pop ($ parts);
user889030

1
Відповідь @lucsan має бути найкращою відповіддю ( stackoverflow.com/a/38481324/1407491 )
Nabi KAZ

6
Замість того, щоб видаляти останню частину, яка може бути порожньою, можна використовувати:$parts = preg_split('/\s+/', $str, -1, PREG_SPLIT_NO_EMPTY);
коефіцієнт

49

Щоб розділити за вкладками:

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

Щоб розділити пробіли / вкладки / нові рядки:

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

Щоб розділити лише пробіли:

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



19

Автор попросив вибухнути, щоб ви могли використовувати вибух, як це

$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.