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);