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.