1つ以上のスペースまたはタブで文字列を分解します


141

文字列を1つ以上のスペースまたはタブで分解するにはどうすればよいですか?

例:

A      B      C      D

これを配列にしたい。


ゼロ個以上のスペースは、各要素に最大1文字が含まれるか、空の要素が無限に存在することを意味します。これでよろしいですか?
bdonlan 2009年

ええ、それはおそらく「1つ以上のスペース」であるべきです。
マイケルマイヤーズ

回答:


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

5
$ parts最後の要素は空になります..削除するにはarray_pop($ parts);
user889030

1
@lucsanの答えが最良の答え(なければなりませんstackoverflow.com/a/38481324/1407491
ナビKAZ

6
代わりに、空である可能性があり、最後の一部を除去する、一つは使用することができる:$parts = preg_split('/\s+/', $str, -1, PREG_SPLIT_NO_EMPTY);
coeing

49

タブで区切るには:

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

スペース/タブ/改行で区切るには:

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

スペースだけで区切るには:

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



19

作者は爆発を求めました、あなたはこのように爆発を使うことができます

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

注:単一引用符ではなく、二重引用符を使用する必要があります。


私のために働いて、正規表現の暗い力を使うよりも少し単純です。
デビッド「はげショウガ」

8
しかし、彼は「スペースまたはタブ」を求め、これはタブでのみ爆発しました。
ジェフ

2
爆発するスペースも探してここに来ました。これについては深い悲しみを覚えます。
セルジオA.




0

他の人々(Ben James)からの回答は非常に優れており、私はそれらを使用しました。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それは問題ではありません、あなたは爆発でスペースで分割することができます。これらの値を使用するまで、展開された値を反復処理し、空白を破棄します。

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

4
タブ区切りの値はどうですか?
dotancohen

タブ区切りの値は分解されないので、大変です。
猫ジル荘2013
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.