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

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

PHP 標準関数逆引き辞典

:: reverse dictionary ::

正規表現

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


Perl 互換の正規表現で文字列を検索する

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

$y = "2005年";
$ym = "2005年4月";
$ymd = "2005年11月22日";

// パターン「X年X月X日」
// ( X は 0 〜 9 の数字で1文字以上)
$pattern = "/[0-9]+年[0-9]+月[0-9]+日/";
$county = preg_match($pattern, $y);
$countym = preg_match($pattern, $ym);
$countymd = preg_match($pattern, $ymd);

// マッチした最初の部分を取得
$pattern = "/[0-9]+/";
preg_match($pattern, $ymd, $matches);

ソースファイル

$county0$countym0$countymd1$matches[0]"2005" になります。

▼ 関数

int preg_match(string p, string s)
int preg_match(string p, string s, array m)
int preg_match(string p, string s, array m, int f)

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

パターン p にマッチする部分が見つかった場合、その時点で検索を終了して 1 を返します。 マッチする部分が見つからなかった場合は 0 を返します。

配列 m を指定すると、マッチした部分をその配列に格納します。

  • m[0] … パターン全体
  • m[1] … 1 番目の括弧
  • m[2] … 2 番目の括弧
  •  :
$ymd = "2005年11月22日";

// マッチした部分を取得
$pattern = "/([0-9]+)年([0-9]+)月([0-9]+)日/";
preg_match($pattern, $ymd, $matches);

ソースファイル

$matches[0]"2005年11月22日"$matches[1]"2005"$matches[2]"11"$matches[3]"22" になります。


フラグ f は、PHP 4.3.0 以降で利用可能です。
フラグは、PREG_OFFSET_CAPTURE のみを指定できます。

このフラグを指定すると、配列 m が二次元配列になり、マッチした部分のオフセットが格納されます。

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

  • m[0][0] … パターン全体
  • m[0][1] … パターン全体 オフセット
  • m[1][0] … 1 番目の括弧
  • m[1][1] … 1 番目の括弧 オフセット
  • m[2][0] … 2 番目の括弧
  • m[2][1] … 2 番目の括弧 オフセット
  •  :
$ymd = "2005年11月22日";

// マッチした部分を取得
$pattern = "/([0-9]+)年([0-9]+)月([0-9]+)日/";
preg_match($pattern, $ymd, $matches, PREG_OFFSET_CAPTURE);

ソースファイル

$matches[0][0]"2005年11月22日"$matches[0][1]0
$matches[1][0]"2005"$matches[1][1]0
$matches[2][0]"11"$matches[2][1]6
$matches[3][0]"22"$matches[3][1]10 になります。

●引数

p … 正規表現のパターン
s … 検索する文字列
m … マッチした部分を格納する配列
f … フラグ

●戻り値

・パターン p にマッチする部分が見つかった … 1
・パターン p にマッチする部分が見つからなかった … 0

●バージョン

PHP3(3.0.9以降)、PHP4 、PHP5


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

スラッシュ( / )などをデリミタにして、その中にパターンを記述します。
(※デリミタ … パターンの始めと終りを表す記号)

例えば、次のようなパターンの場合、

"/ABC/"

"ABCDEFG""123ABC456""789ABC" の全てにマッチします。
"ABC" がどの位置にあってもマッチします)

パターンには文字列だけでなく、メタ文字や量指定子などの特殊文字も指定できます。


(1) メタ文字

指定できるメタ文字は、次のとおりです。

メタ文字 内容
\ 直後の特殊文字をエスケープ(通常の文字にする)
^ 行の先頭
$ 行の末尾
. 任意の1文字にマッチ(改行以外)
| パターンの論理和
() パターンをグループ化
[] 文字クラス

メタ文字などの特殊文字を通常の文字として扱う場合は、その文字をエスケープします。 パターンによっては、\ をさらにエスケープする必要があります。

"/\\\\1000/"   … \1000 にマッチ
"/\\\$var/"    … $var にマッチ
"/\(float\)/"  … (float) にマッチ

論理和を指定する場合は、パターンをグループ化します。

"/<(p|\/p)>/"         … <p> と </p> にマッチ
"/\.(gif|jpg|png)$/"  … .gif と .jpg と .png にマッチ

文字クラスの中には、マッチさせたい文字を指定します。
指定した文字のいずれかがマッチするようになります。

[ACEG]   … A,C,E,G にマッチ
[13579]  … 奇数にマッチ

文字クラスは、「 - 」で範囲を指定することもできます。

[0-9]        … 数字にマッチ
[a-z]        … 英小文字にマッチ
[A-Z]        … 英大文字にマッチ
[0-9a-zA-Z]  … 英数字にマッチ

また、「 ^ 」を先頭に付けると、指定した文字以外にマッチするようになります。

[^13579]      … 奇数以外(偶数)にマッチ
[^0-9]        … 数字以外にマッチ
[^a-z]        … 英小文字以外にマッチ
[^A-Z]        … 英大文字以外にマッチ
[^0-9a-zA-Z]  … 英数字以外にマッチ

(2) 量指定子

指定できる量指定子は、次のとおりです。

量指定子 内容
* 0 回以上のパターンの繰り返し
+ 1 回以上のパターンの繰り返し
? 0 または 1 回のパターン
{n} n 回のパターンの繰り返し
{n,} n 回以上のパターンの繰り返し
{n,m} n 回以上 m 回以下のパターンの繰り返し

量指定子は、繰り返すパターンの直後に指定します。

.*                … 0 文字以上にマッチ(改行まで)
[0-9]+            … 1 文字以上の数字にマッチ
[a-z]?[0-9]\.txt  … 0.txt や a4.txt などにマッチ
[0-9]{3}          … 3 桁の数字にマッチ
[0-9]{3,}         … 3 桁以上の数字にマッチ
[0-9]{3,6}        … 3 桁以上 6 桁以下の数字にマッチ

(3) エスケープシーケンス

パターンには、次のエスケープシーケンスも指定できます。

エスケープ
シーケンス
内容
\t タブ
\n 改行
\r キャリッジリターン
\0?? 制御コード 8進数
\x?? 制御コード 16進数

制御コードは、画面に表示されない文字に対応する値です。
主な制御コードは、次のとおりです。

制御コード 対応する文字
8進数 16進数
011 x09 水平タブ \t
012 x0a 改行 \n
013 x0b 垂直タブ
014 x0c 改ページ
015 x0d 復帰(キャリッジリターン) \r
040 x20 半角スペース

(4) 定義済み文字クラス

数字や英数字の文字クラスは、エスケープシーケンスのような形で定義されています。 エスケープシーケンスと同様に、そのまま指定できます。

定義済み
文字クラス
内容
\d 数字 [0-9]
\D 数字以外 [^0-9]
\w 英数字の単語 [_a-zA-Z0-9]
\W 英数字の単語以外 [^_a-zA-Z0-9]
\s 空白 [ \t\n\r]
\S 空白以外 [^ \t\n\r]
\b 単語境界 \w\W の間
\B 単語境界以外

注目キーワード ベスト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