PHP preg_split 文字列を配列にする(正規表現)

PHPのpreg_split関数で文字列を分割して配列にするサンプルです。
preg_splitは正規表現を使用できます。

目次

サンプル preg_splitとは(文字列を分割して配列にする)
  カンマで区切る / 半角スペースで区切る / タブで区切る
  スラッシュで区切る / 改行で区切る
  複数の区切り文字をORで指定 / 複数の区切り文字をANDで指定
  取得する要素数を指定 / 末尾が区切り文字の時、最後は要素になる?

preg_splitとは(文字列を分割して配列にする)

array preg_split ( string $正規表現のパターン , string $入力文字列 [, int $数値 = -1 [, int $flags = 0 ]] )
  • 正規表現で文字列を分割します。
  • 戻り値は配列です。
  • 3つ目の引数(数値)は、分割する数を指定します。省略可能です。0と-1は制限が無いことを意味します。
  • 以下は、PHPマニュアルのpreg_split関数のリンクです。
    http://php.net/manual/ja/function.preg-split.php

カンマで区切る

<?php
$str1 = "赤,黄,青";
$array1 = preg_split("/,/", $str1);

foreach ($array1 as $a) {
  echo $a; //赤 黄 青
}
echo $array1[0]; // 赤

3行目は、文字列をカンマで区切って配列にしています。

半角スペースで区切る

<?php
$str1 = "赤 黄 青";
$array1 = preg_split("/\s/", $str1);

foreach ($array1 as $a) {
  echo $a; //赤 黄 青
}
echo $array1[0]; // 赤

3行目は、文字列を半角スペースで区切って配列にしています。(バックスラッシュ(円記号)+S)

タブで区切る

<?php
$str1 = "赤	黄	青";
$array1 = preg_split("/\t/", $str1);

foreach ($array1 as $a) {
  echo $a; //赤 黄 青
}
echo $array1[0]; // 赤

3行目は、文字列をタブで区切って配列にしています。(バックスラッシュ(円記号)+t)

スラッシュで区切る

<?php
$str1 = "2020/05/21";
$array1 = preg_split("/\//",$str1);

print_r($array1);//Array ( [0] => 2020 [1] => 05 [2] => 21 )
foreach ($array1 as $a){
	echo $a; //2020 05 21
}
echo $array1[0]; // 2020

3行目は、スラッシュで分割します。
区切るスラッシュの前にバックスラッシュを入れます。

改行で区切る

<?php
$str1 = "赤と黄\r\n青と緑";
$array1 = preg_split("/\r\n|\n/", $str1);

print_r($array1); //Array ( [0] => 赤と黄 [1] => 青と緑 )

正規表現で改行を指定しています。
\r\nは復帰改行(CRLF)、\nは改行(LF)、パイプ(|)はorを意味します。

複数の区切り文字をORで指定

<?php
$str1 = "あ,い:う,え";
$array1 = preg_split("/[,:]/", $str1);

print_r($array1); //Array ( [0] => あ [1] => い [2] => う [3] => え )

3行目の[,:]は、カンマ(,)またはコロン(:)という正規表現です。

複数の区切り文字をANDで指定

<?php
$str1 = "a:a:;bb:;c;c";
$array1 = preg_split("/:;/", $str1);

print_r($array1); //Array ( [0] => a:a [1] => bb [2] => c;c )

3行目の:;は、コロン(:)とセミコロン(;)という正規表現です。
正規表現のパターンにiオプション(preg_split("/;:/i",$str1))を使用すると大文字と小文字の区別をしなくなります。

取得する要素数を指定

<?php
$str1 = "a,b,c,d,e,f,g";
$array1 = preg_split("/,/", $str1,3);

print_r($array1); //Array ( [0] => a [1] => b [2] => c,d,e,f,g )

3行目は、3つ目の引数が3なので戻りの配列の要素数は3つです。

末尾が区切り文字の時、最後は要素になる?

<?php
$str1 = "a,b,c,,";
$array1 = preg_split("/,/", $str1);

print_r($array1); //Array ( [0] => a [1] => b [2] => c [3] => [4] => )

2行目は、末尾がカンマで終わっています。
結果は、5,7行目のように空文字も要素として取得します。

正規表現のパターン

正規表現の一覧表

関連の記事

PHP preg_match 正規表現で数値を返す
PHP str_replace 文字列を置換する(正規表現)

△上に戻る