PHP研究
14.正規表現
これまでにもなんとなく正規表現の関数が出てきたけど、ここでまとめて見たいと思います。
PHP独自のPOSIX1003.2 で定義されたPOSIX 拡張正規表現関数と、
Perl互換の関数があるようです。
正規表現でマッチさせる
ereg("正規表現",$str[, $array])
$strにある文字列に正規表現をマッチさせます。
$arrayはオプションで、マッチした文字列を配列として格納します。
例
if (ereg ("([0-9]{4})-([0-9]{1,2})-([0-9]{1,2})", $date, $regs)) {
大文字小文字を区別せずマッチング
eregi("正規表現", $str[, $array])
ereg()と同様の書式ですが、大文字小文字を区別しません。
例
if (eregi("z", $string)) {
置換
ereg_replace("マッチさせる正規表現","置き換える文字列",$str)
例
echo ereg_replace (" is", " was", $string);
大文字小文字を区別せず置換
eregi_replace("マッチさせる正規表現","置き換える文字列",$str)
正規表現検索
preg_match("正規表現",$str[,$array])
Perl互換の正規表現関数です。
例
if (preg_match ("/php/i", "PHP is the web scripting language
of choice.")) {
日本語対応正規表現(PHP4.2.0以降)
mb_regex_encoding("SJIS") ;//内部エンコーディングと違う文字コードの場合に指定
mb_ereg("正規表現",$str[, $array]);
大文字小文字を区別しない日本語対応正規表現(PHP4.2.0以降)
mb_regex_encoding("SJIS") ;//内部エンコーディングと違う文字コードの場合に指定
mb_eregi("正規表現",$str[, $array]);
上記2つの日本語対応正規表現は、まだ実験段階とのこと。
テストスクリプトを作ってみたけど、このサーバでは動かなかった。
| PHP | Perl | 意味 |
| [= =] | [=と=]の間にあるキャラクタと“等価”なキャラクタにマッチ | |
| [: :] | キャラクータクラス指定 [:alnum:] アルファベットと(十進)数字 [:alpha:] アルファベット [:blank:] 空白文字(スペース、タブ等) [:cntrl:] 制御文字 [:digit:] 十進数字 [:graph:] 印字可能かつ表示可能な文字(スペースは印字可能だが表示可能ではない) [:lower:] アルファベットの小文字 [:print:] 印字可能なキャラクタ(=制御文字以外のキャラクタ) [:punct:] 句読点(通常の文字、数字、制御文字、スペースのいずれでもないキャラクター) [:space:] スペース、タブ、改ページ [:upper:] アルファベットの大文字 [:xdigit:] 十六進数字 |
|
| \w | アルファベット、数字又は下線 | |
| \W | アルファベット、数字、下線以外 | |
| \d | 数字 | |
| \D | 数字以外[^0-9]と同じ | |
| \s | 空白文字(スペース、タブ、改行) | |
| \S | 空白文字以外 | |
| \n | 改行 | |
| \r | リターン(復帰) | |
| \t | タブ | |
| \d | バックスペース | |
| 12 | 8進数の値 | |
| \x811 | 16進数の値 | |
| \cx | 制御文字 | |
| [. .] | [.と.]に挟まれたキャラクタ列を一つの照合要素とみなす | |
| [a-z0-9] | [a-z0-9] | [ ]の中の任意の1文字 |
| [^a-z0-9] | [^a-z0-9] | [ ]の中にない任意の1文字 |
| ( ) | ( ) | グループ化 |
| * | * | 直前の文字が0個以上 |
| + | + | 直前の文字が1個以上 |
| ? | ? | 直前の文字が0個または1個 |
| {a} | 直前の文字がa個 | |
| {a,} | 直前の文字がa個以上 | |
| {a,b} | {a,b} | 直前の文字がa個以上b個以下 |
| ?? | 直前の文字が0個または1個(最短一致) | |
| *? | 直前の文字が0個以上(最短一致) | |
| +? | 直前の文字が1個以上(最短一致) | |
| {a}? | 直前の文字がa個 (最短一致) | |
| {a,}? | 直前の文字がa個以上 (最短一致) | |
| {a,b}? | 直前の文字がa個以上b個以下 (最短一致) | |
| ^ | ^ | 行頭 |
| $ | $ | 行末 |
| | | | |
演算子の左右に置かれた部分正規表現のいずれか |
| . | . | 改行文字を除く任意の1文字 |
| \b | 単語の区切り | |
| \B | 単語の区切り以外 | |
| \ | 次のメタ文字をクォートする ( \. → "."自信を表わす) | |
| $1.$2, \1.\2 | グループ化した項目を後で参照する | |
| $& | マッチした文字列全体 | |
| $` | マッチした文字列の前にある全ての文字列 | |
| $' | マッチした文字列の後ろにある全ての文字列 |