PHP入門 正規表現関数 正規表現で文字列を分割する(preg_split関数)

正規表現による分割処理を行うには、preg_split関数を利用します。

構文:preg_split関数

preg_match(string $pattern, string $subject
                 [, int $limit = -1 [, int $flags]):array|false
$pattern正規表現パターン(空パターン「//」の場合、1文字単位に分割)
$subject分割対象の文字列
$limit分割の上限回数(規定では無制限)
$flags動作オプション

preg_split関数の動作オプション(引数$flagsの設定値)

設定値概要
PREG_SPLIT_NO_EMPTY分割の結果、空文字列となった要素は結果から除去
PREG_SPLIT_DELIM_CAPTURE引数$patternでサブマッチした文字列も分割結果に反映
PREG_SPLIT_OFFSET_CAPTUREオフセット値も分割結果に反映

これらの定数は論理和演算子「|」で複数を組み合わせることもできます。

例:

「YYYY/MM/DD」「YYYY-MM-DD」「YYYY.MM.DD」という日付文字列を「/」「.」「-」のいずれかの区切り文字で分割して、その結果を再結合したもを「YYYY年MM年DD日」の形式で出力するコード

<?php
$today = '2024-12-23';
$result = preg_split('|[/.\-]|',$today);
print "{$result[0]}年{$result[1]}月{$result[2]}日";
実行結果
実行結果
正規表現を使った処理は、それなりオーバーヘッドの大きな処理です。単純に固定文字列で分割するなら、explode関数を優先して使いましょう。

例:動作オプション PREG_SPLIT_DELIM_CAPTUREの動作

PREG_SPLIT_DELIM_CAPTUREを指定することで、区切り文字パターン(引数$pattern)に含まれるサブマッチ文字列を分割結果に含めることができます。ここでは、区切り文字パターン全体を丸カッコでくくっているので、区切り文字がそのまま分割結果に反映されます。

<?php
$today = '2024-12-23';
$result = preg_split('|[/.\-]|',$today,-1,PREG_SPLIT_DELIM_CAPTURE);
print_r($result);
実行結果
実行結果