Rozbij ciąg o co najmniej jedną spację lub tabulator


141

Jak mogę rozbić ciąg o jedną lub więcej spacji lub tabulatorów?

Przykład:

A      B      C      D

Chcę zrobić z tego tablicę.


zero lub więcej spacji oznacza, że ​​albo każdy element będzie miał co najwyżej jeden znak, albo będziesz mieć nieskończenie wiele pustych elementów. Czy na pewno tego chcesz?
— bdonlan

Tak, prawdopodobnie powinno to być „jedna lub więcej spacji”.
— Michael Myers

Odpowiedzi:



49

Aby oddzielić zakładkami:

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

Aby oddzielić spacjami / tabulatorami / znakami nowej linii:

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

Aby oddzielić tylko spacjami:

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


23

To działa:

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

19

Autor poprosił o eksplozję, abyś mógł użyć takiego wybuchu

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

Uwaga: musisz użyć podwójnego cudzysłowu, a nie pojedynczego.


U mnie zadziałało i jest odrobinę prostsze niż używanie mrocznej mocy wyrażeń regularnych.
— David „łysy rudy”

8
Ale poprosił o „spacje lub tabulatory”, a to eksploduje tylko w przypadku tabulatorów.
— Jeff,

2
Przyjechałem tutaj, szukając eksplodujących przestrzeni. Czuję się z tego powodu smutny.
— Sergio A.




0

Odpowiedzi udzielone przez innych ludzi (Ben James) są całkiem dobre i korzystałem z nich. Jak wskazuje user889030, ostatni element tablicy może być pusty. W rzeczywistości pierwszy i ostatni element tablicy mogą być puste. Poniższy kod rozwiązuje oba problemy.

# 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, to nie ma znaczenia, możesz po prostu podzielić przestrzeń za pomocą wybuchu. Dopóki nie zechcesz użyć tych wartości, iteruj po rozstrzelonych wartościach i odrzucaj puste miejsca.

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

4
A co z wartościami rozdzielanymi tabulatorami?
— dotancohen,

Wartości rozdzielane tabulatorami nie zostaną rozbite, więc ugh.
— NekojiruSou
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.