2009年3月5日木曜日

PHPで文字列の中から特定の文字列を探す関数の比較

PHP5での実行例。


検索対象の文字列と探したい文字列
$src = 'Sweet Apples, Pineapples and Green apples are.';
$search = 'apple';


/*** 位置を探す ***/
strrpos()はPHP4では$searchの最初の1文字のみが対象らしい。
//前から探す
var_dump(strpos($src, $search)); // -> 18
//前から探す(大文字小文字の区別なし)
var_dump(stripos($src, $search)); // -> 6
//後ろから探す
var_dump(strrpos($src, $search)); // -> 35
//後ろから探す(大文字小文字の区別なし)
var_dump(strripos($src, $search)); // -> 35


/*** それ以降の文字列を取得する ***/
strrchr()は、$searchの最初の1文字のみが対象なので注意。
strrichr()は無いようだ
//前から探す
var_dump(strstr($src, $search)); // -> 'apples and Green apples are.'
//前から探す(大文字小文字の区別なし)
var_dump(stristr($src, $search)); // -> 'Apples, Pineapples and Green apples are.'
//後ろから探す
var_dump(strrchr($src, $search)); // -> 'are.'


/*** マルチバイト対応の関数で探す ***/
文字列がマルチバイトの場合にはこちらで
//前から探す
var_dump(mb_strpos($src, $search)); // -> 18
//前から探す(大文字小文字の区別なし)
var_dump(mb_stripos($src, $search)); // -> 6
//後ろから探す
var_dump(mb_strrpos($src, $search)); // -> 35
//後ろから探す(大文字小文字の区別なし)
var_dump(mb_strripos($src, $search)); // -> 35


/*** マルチバイト対応の関数で、それ以降の文字列を取得する ***/
文字列がマルチバイトの場合にはこちらで
//前から探す
var_dump(mb_strstr($src, $search)); // -> 'apples and Green apples are.'
//前から探す(大文字小文字の区別なし)
var_dump(mb_stristr($src, $search)); // -> 'Apples, Pineapples and Green apples are.'
//後ろから探す
var_dump(mb_strrchr($src, $search)); // -> 'apples are.'
//前から探す(大文字小文字の区別なし)
var_dump(mb_strrichr($src, $search)); // -> 'apples are.'


/*** 正規表現(Perl互換)で探す ***/
戻り値はヒットした数
//最初の1つを探す
$rtn = preg_match('/' . $search . '/', $src, $matches);
var_dump($rtn); // -> 1
var_dump($matches); // -> array('apple')
//全て探す
$rtn = preg_match_all('/' . $search . '/', $src, $matches);
var_dump($rtn); // -> 2
var_dump($matches); // -> array('apple', 'apple')


/*** 正規表現(マルチバイト対応版)で探す ***/
3番目の引数を渡した場合、戻り値はヒットした文字列のバイト数
//最初の1つを探す
$rtn = mb_ereg($search, $src, $matches);
var_dump($rtn); // -> 5
var_dump($matches); // -> array('apple')
//最初の1つを探す(大文字小文字の区別なし)
$rtn = mb_eregi($search, $src, $matches);
var_dump($rtn); // -> 5
var_dump($matches); // -> array('Apple')
//先頭から一致するか調べる
var_dump(mb_ereg_match('.*' . $search, $src)); // -> true



参考:
PHP: String 関数 - Manual
PHP: マルチバイト文字列 関数 - Manual
PHP: PCRE 関数 - Manual (Perl互換正規表現関数)

0 件のコメント:

コメントを投稿