PHP の標準関数を目的別に調べることができる辞典

ホーム > PHP 標準関数逆引き辞典 > 正規表現 > Perl 互換の正規表現で文字列を分割する

PHP 標準関数逆引き辞典

:: reverse dictionary ::

正規表現

※ソースファイルについて


Perl 互換の正規表現で文字列を分割する

Perl 互換の正規表現で文字列を分割するには、preg_split 関数を使います。

$data = "Windows,Linux, Solaris ,  FreeBSD";

// カンマで分割(空白もパターンに含む)
$pattern = "/\s*,\s*/";
$results = preg_split($pattern, $data);

ソースファイル

$results[0]"Windows"$results[1]"Linux"$results[2]"Solaris"$results[3]"FreeBSD" になります。

▼ 関数

array preg_split(string p, string s)
array preg_split(string p, string s, int n)
array preg_split(string p, string s, int n, int f)

正規表現のパターン p で文字列 s を分割します。

パターン p にマッチする部分が見つかった場合、その部分の次の文字から検索を続けます。 文字列 s の最後に到達すると、マッチした部分で分割した文字列を配列にして返します。

マッチする部分が見つからなかった場合は、文字列 s を格納した配列を返します。

なお、マッチした部分が連続する場合は、分割した文字列が空の文字列( "" )になります。

$data = "Windows,, ,  FreeBSD";

// カンマで分割(空白もパターンに含む)
$pattern = "/\s*,\s*/";
$results = preg_split($pattern, $data);

ソースファイル

$results[0]"Windows"$results[1]""$results[2]""$results[3]"FreeBSD" になります。


n を指定した場合は、返す配列の要素数が n になるように分割します。
分割回数は、n - 1 回になります。

$data = "Windows,Linux, Solaris ,  FreeBSD";

// カンマで分割(空白もパターンに含む)
$pattern = "/\s*,\s*/";
$results = preg_split($pattern, $data, 3);

ソースファイル

$results[0]"Windows"$results[1]"Linux"$results[2]"Solaris ,  FreeBSD" になります。

n0 または -1 を指定した場合は、文字列 s の最後まで分割を行います。
n を省略した場合と同じ)

-2 以下を指定すると、文字列 s を格納した配列を返します。


フラグ f は、PHP 4.0.1 以降で利用可能です。
次の3つのフラグを指定できます。

  1. PREG_SPLIT_NO_EMPTY
  2. PREG_SPLIT_DELIM_CAPTURE
  3. PREG_SPLIT_OFFSET_CAPTURE

それぞれのフラグは、戻り値の配列に影響します。

(1) PREG_SPLIT_NO_EMPTY

このフラグを指定すると、空の文字列( "" )を含まない配列を返します。

$data = "Windows,, ,  FreeBSD";

// カンマで分割(空白もパターンに含む)
$pattern = "/\s*,\s*/";
$results = preg_split($pattern, $data, -1,
                      PREG_SPLIT_NO_EMPTY);

ソースファイル

$results[0]"Windows"$results[1]"FreeBSD" になります。

(2) PREG_SPLIT_DELIM_CAPTURE

このフラグは、PHP 4.0.5 以降で利用可能です。

このフラグを指定すると、括弧で囲まれたパターンにマッチした部分を同時に取得します。 戻り値は、分割した文字列の後にマッチした部分を格納した配列になります。

  • ▽括弧が1組の場合
  • return[0] … 分割した文字列(1)
  • return[1] … マッチした部分(1)
  • return[2] … 分割した文字列(2)
  • return[3] … マッチした部分(2)
  •  :
  • ▽括弧が2組の場合
  • return[0] … 分割した文字列(1)
  • return[1] … マッチした部分(1) 1 番目の括弧
  • return[2] … マッチした部分(1) 2 番目の括弧
  • return[3] … 分割した文字列(2)
  • return[4] … マッチした部分(2) 1 番目の括弧
  • return[5] … マッチした部分(2) 2 番目の括弧
  •  :
  • ▽括弧が3組の場合
  • return[0] … 分割した文字列(1)
  • return[1] … マッチした部分(1) 1 番目の括弧
  • return[2] … マッチした部分(1) 2 番目の括弧
  • return[3] … マッチした部分(1) 3 番目の括弧
  • return[4] … 分割した文字列(2)
  • return[5] … マッチした部分(2) 1 番目の括弧
  • return[6] … マッチした部分(2) 2 番目の括弧
  • return[7] … マッチした部分(2) 3 番目の括弧
  •  :
$data = "987 + 65 * 43 / 2 - 1 = 22617";

// 演算子で分割(演算子を同時に取得)
$pattern = "/\s*([\+\-\*\/=]+)\s*/";
$results = preg_split($pattern, $data, -1,
                      PREG_SPLIT_DELIM_CAPTURE);

ソースファイル

$results[0]"987"$results[1]"+"
$results[2]"65"$results[3]"*"
$results[4]"43"$results[5]"/"
$results[6]"2"$results[7]"-"
$results[8]"1"$results[9]"="
$results[10]"22617" になります。

(3) PREG_SPLIT_OFFSET_CAPTURE

このフラグは、PHP 4.3.0 以降で利用可能です。

このフラグを指定すると、戻り値が二次元配列になり、分割した文字列のオフセットが格納されます。

※オフセット … 先頭のインデックス

  • return[0][0] … 分割した文字列(1)
  • return[0][1] … 分割した文字列(1) オフセット
  • return[1][0] … 分割した文字列(2)
  • return[1][1] … 分割した文字列(2) オフセット
  • return[2][0] … 分割した文字列(3)
  • return[2][1] … 分割した文字列(3) オフセット
  •  :

$data = "Windows,Linux, Solaris ,  FreeBSD";

// カンマで分割(空白もパターンに含む)
$pattern = "/\s*,\s*/";
$results = preg_split($pattern, $data, -1,
                      PREG_SPLIT_OFFSET_CAPTURE);

ソースファイル

$results[0][0]"Windows"$results[0][1]0
$results[1][0]"Linux"$results[1][1]8
$results[2][0]"Solaris"$results[2][1]15
$results[3][0]"FreeBSD"$results[3][1]26 になります。

●引数

p … 正規表現のパターン
s … 分割する文字列
n … 取得する分割文字列の個数(=分割回数 + 1
f … フラグ

●戻り値

・パターン p にマッチする部分が見つかった … 分割した文字列の配列
・パターン p にマッチする部分が見つからなかった … s を格納した配列

●バージョン

PHP3(3.0.9以降)、PHP4 、PHP5


正規表現のパターンは、Perl と同じ形式で指定できます。

注目キーワード ベスト5

  1. セキュリティ
  2. ホスティング
  3. レンタルサーバ
  4. ファイル復旧
  5. ハードディスク修復

正規表現 - regular expression -


ホーム > PHP 標準関数逆引き辞典 > 正規表現 > Perl 互換の正規表現で文字列を分割する

Copyright (C) 2005-2007 Noto Watabe. All rights reserved.
e-mail:wmh@always-pg.com