:: reverse dictionary ::
※ソースファイルについて
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);
$county は 0 、$countym は 0 、$countymd は 1 、$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 を指定すると、マッチした部分をその配列に格納します。
$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 が二次元配列になり、マッチした部分のオフセットが格納されます。
※オフセット … 先頭のインデックス
$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
スラッシュ( / )などをデリミタにして、その中にパターンを記述します。
(※デリミタ … パターンの始めと終りを表す記号)
例えば、次のようなパターンの場合、
"/ABC/"
"ABCDEFG" 、"123ABC456" 、"789ABC" の全てにマッチします。
("ABC" がどの位置にあってもマッチします)
パターンには文字列だけでなく、メタ文字や量指定子などの特殊文字も指定できます。
指定できるメタ文字は、次のとおりです。
| メタ文字 | 内容 |
|---|---|
| \ | 直後の特殊文字をエスケープ(通常の文字にする) |
| ^ | 行の先頭 |
| $ | 行の末尾 |
| . | 任意の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] … 英数字以外にマッチ
指定できる量指定子は、次のとおりです。
| 量指定子 | 内容 |
|---|---|
| * | 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 桁以下の数字にマッチ
パターンには、次のエスケープシーケンスも指定できます。
|
エスケープ シーケンス |
内容 |
|---|---|
| \t | タブ |
| \n | 改行 |
| \r | キャリッジリターン |
| \0?? | 制御コード 8進数 |
| \x?? | 制御コード 16進数 |
制御コードは、画面に表示されない文字に対応する値です。
主な制御コードは、次のとおりです。
| 制御コード | 対応する文字 | |
|---|---|---|
| 8進数 | 16進数 | |
| 011 | x09 | 水平タブ \t |
| 012 | x0a | 改行 \n |
| 013 | x0b | 垂直タブ |
| 014 | x0c | 改ページ |
| 015 | x0d | 復帰(キャリッジリターン) \r |
| 040 | x20 | 半角スペース |
数字や英数字の文字クラスは、エスケープシーケンスのような形で定義されています。 エスケープシーケンスと同様に、そのまま指定できます。
|
定義済み 文字クラス |
内容 |
|---|---|
| \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 | 単語境界以外 |
Copyright (C) 2005-2007 Noto Watabe. All rights reserved.
e-mail:wmh@always-pg.com