SAK 図書館
PHP 基礎編9 - 正規表現、マッチ、置き換え、ereg、eregi、eregi_replace
■正規表現
・PHP では、ereg で文字列の検索や置き換えを行う。
(パターンマッチ、パターンマッチング)
大文字小文字の区別をしない場合は、eregi を使用する。
また、文字列を置き換える場合は、ereg_replace を使用する。
大文字小文字の区別をしない置き換えは、eregi_replace を使用する。
$rcd = ereg(マッチパターン, 対象変数 [, 代入配列]);
|_ True 一致(マッチ数)
False 不一致
$rcd = eregi(マッチパターン, 対象変数 [, 代入配列]);
|_ True 一致(マッチ数)
False 不一致
$rcd = ereg_replace(マッチパターン, 置換文字列, 対象変数);
|_ True 一致(マッチ数)
False 不一致
$rcd = eregi_replace(マッチパターン, 置換文字列, 対象変数);
|_ True 一致(マッチ数)
False 不一致
■日本語正規表現
$rcd = mbereg(マッチパターン, 対象変数 [, 代入配列]);
$rcd = mberegi(マッチパターン, 対象変数 [, 代入配列]);
$rcd = mbereg_replace(マッチパターン, 置換文字列, 対象変数);
$rcd = mberegi_replace(マッチパターン, 置換文字列, 対象変数);
■メタ文字
. 改行を除く任意の 1 文字
* 0 回以上のパターン繰り返し
+ 1 回以上のパターン繰り返し
? 0 または 1 回のパターン
^ 先頭から
$ 末尾から
\ メタ文字クォート
| パターン論理和
() パターングループ
[] 文字クラス
{} 量指定子
以下の、\s、\S、\f は PHP では使用できないとのこと。
正しい、制御コードは、
\x09 \t 水平タブ (Horizontal Tabulation)
\x0a \n 改行 (Line Feed)
\x0b 垂直タブ (Vertical Tablation)
\x0c 書式送り (From Feed)
\x0d \r 復帰 (Carrige Return)
\x20 " " 間隔 (Space)
との情報を頂戴した。
Perl の構文を基本に一部しか実際にテストしていないので他にも PHP では
違いがあるかもしれません。(^^;
**\n 改行 文字クラスでも指定可
\r キャリッジリターン 文字クラスでも指定可
**\f ラインフィード 文字クラスでも指定可
\t タブ 文字クラスでも指定可
\d 数字 [0-9] 文字クラスでも指定可
\D 数字以外 [^0-9]
\w 英数字単語 [_a-zA-Z0-9] 文字クラスでも指定可
\W 英数字単語以外 [^_a-zA-Z0-9]
**\s 空白 [ \t\n\r\f] 文字クラスでも指定可
**\S 空白以外 [^ \t\n\r\f]
\b 単語境界 \w、\W の間 文字クラスでも指定可
\B 単語境界以外
\x?? 16 進数
「**」部分は Perl と相違があるようなので注意。
ereg 関数群のホワイトスペースのマッチには、以下を使用するとのこと。
[[:blank:]] 空白文字にマッチする。[ \t] と等価
[[:space:]] 全てのホワイトスペースにマッチする。[ \t\n\x0b\x0c\r] と等価
■文字クラス
- 範囲
^ 先頭に置くと以外にマッチ
[0123456789] 数字にマッチ
[0-9] 数字にマッチ
[^0-9] 数字以外にマッチ
[a-zA-Z] 英字にマッチ
[a-fA-F\d] 16 進数にマッチ
■量指定子
{}? 最短マッチ(? がないと最長マッチになる)
* 0 回以上のパターン繰り返し
+ 1 回以上のパターン繰り返し
? 0 または 1 回のパターン
{n}? n 回繰り返しマッチ
{n,}? n 回以上繰り返しマッチ
{n, m}? n 回以上、m 回以下繰り返しマッチ
■検索例
$rcd = ereg("abc", $var); abc にマッチ
$rcd = ereg("a.c", $var); a?c にマッチ
$rcd = ereg("a(bb|b1|b2)c", $var); abbc、ab1c、ab2c にマッチ
$rcd = ereg("^abc", $var); abc で始まるとマッチ
$rcd = ereg("abc$", $var); abc で終わるとマッチ
$rcd = ereg("^$", $var); 空行とマッチ
$rcd = ereg("ab?c", $var); ac、abc にマッチ
$rcd = ereg("a.*c", $var); ac、abc、ab1c などにマッチ
$rcd = ereg("a.+c", $var); abc、ab1c などにマッチ
$rcd = ereg("[0-9]{1, 2}", $var); 0 〜 99 にマッチ
$rcd = ereg("[a-zA-Z]{8,}", $var); 英字 8 文字以上にマッチ
$rcd = ereg("あいうえお{2}", $var); 「あいうえおお」にマッチ
$rcd = ereg("(あいうえお){2}", $var); 「あいうえおあいうえお」にマッチ
■置換例
$rcd = ereg_replace("abc", "123", $var); abc を 123 に
$rcd = ereg_replace("<", "&lt;", $var); < を &lt; に
$rcd = ereg_replace("abc", "", $var); abc を削除(指定文字を取り除く)
$rcd = ereg_replace("\@", "", $var); @ マークを削除
■PHP 基礎編資料
■PHP + MySQL 編資料
■CGI-Perl 基礎編資料
■CGI-Perl 基礎実地編資料
■CGI-Perl 応用実地編資料