Ext JSやRapid Driveなど
システム開発の技術情報をご紹介。

お問い合わせ 資料請求 無料見積り

お電話でお気軽にお問い合わせくださいTel 03-6805-2904 営業時間 [平日]AM 9:30 - PM 6:30

パターンマッチング

パターンマッチングについて

正規表現関数

パターン検索とマッチング

ereg()関数は、引数の文字列とパターンの一致するものを検索します。

ereg(pattern,string,[regs])
文字列の検索
<?php
   $str = "XENOPHY";
   if(ereg("^X",$str))
   echo "xFrameworkPX";
?>
実行結果
xFrameworkPX

上記スクリプトでは、変数$strの値「XENOPHY」が「Xから始まる文字列」に該当するので、メッセージのxFrameworkPXがechoで出力されます。

パターン検索と置換

ereg_replace()関数は、引数にある文字列と一致する文字列を置換します。

ereg_replace(pattern,replacement,string)
パターンが一致する文字列を置き換える
<?php
    $str = "PHP Product";
    echo ereg_replace("PHP","MySQL",$str);
?>
実行結果
MySQL Product

上記のスクリプトでは、変数$strに入っている「PHP」と一致する文字列を「MySQL」に置き換えています。ただ、ereg_replace()関数は変数に入っている文字列が「PHP」で、引数に入っている文字が「php」だと置換することができません(変数に入っている文字列が置換されずそのまま出力される)。文字のパターンマッチングをする際に、大文字、小文字の区別なく置換したい場合には、eregi_replace()関数を使用します。

eregi_replace()関数で置換
<?php
    $str = "php Product";
    echo eregi_replace("PHP","MySQL",$str);
?>
実行結果
MySQL Product

上記スクリプトでは、「$str = "php Product";」の「php」が小文字で「eregi_replace("PHP","MySQL",$str);」の「PHP」が大文字ですが、実行結果から大文字小文字の区別なく置換できていることがわかります。

文字列を分割する

split()関数は、引数にある文字列を区切り文字で分割して配列として返すことができます。

split(pattern,string,[limit])
区切り文字で文字列を分割する
<?php
    $str = "January February March April May June July August September October November December";
    $year = split(" ",$str); //半角の空白で区切っている
    echo "$year[0], $year[1], $year[2], $year[3], $year[4], $year[5], $year[6], $year[7], $year[8], $year[9],
    $year[10] ,$year[11]";
?>
実行結果
January, February, March, April, May, June, July, August,
September, October, November ,December

上記のスクリプトでは、変数$strに入っている文字列を「" "(半角の空白)」を区切り文字とし、分割をして、それらの結果を配列としてそれぞれ$yearに格納されています。

特殊文字

特殊文字について

PHPの正規表現で使用される特殊文字と言われるものに関して紹介していきます。

¥

特殊文字の前に記述することによって、特殊文字が通常の文字として認識されます。逆に、通常の文字の前に記述すると通常の文字が特殊文字として認識されます。

¥$ 通常の文字の「$」として認識と認識される。
¥t //特殊記号のタブ文字として認識される。
*

*の前にある文字が、0もしくは連続して存在している場合に、その全ての文字列に一致する。

Ju* 「June」のJu、「July」のJに一致する。
+

+の前の文字が一個、もしくは連続して存在する場合に、その全ての文字列に一致する。

u+ 「June」の「u」1文字、「Juuuuuuune」にある全ての「u」に一致する。
?

?の前にある文字が一個、もしくは存在しないものに一致します。

June? 「Jun」、「June」に一致します。
.

.は改行記号「¥n」以外の文字に一致します。

|

論理式にあるorに相当します。

string1|string2 文字列string1またはstring2のどちらかと一致する。