PHPの文字列置換関数はどれを使う?
PHPにはいろんな文字列置換関数があるようだ*1。整理してみる。
string str_replace(置換前の文字列, 置換後の文字列, 検索する文字列)
string str_ireplace(置換前の文字列, 置換後の文字列, 検索する文字列)
string preg_replace(置換前の文字列, 置換後の文字列(正規表現), 検索する文字列)
どれも文字列の置換を行うが、1.はアルファベットの大小を区別し、2.は区別しない。
ファイル名:testReplace.php <?php // 'GANGSTAR NUMBER 1'という文字列に対して、 $before = 'GANGSTAR NUMBAR 1'; // 'AR'を'ER'に置換 $target1 = 'AR'; $replacement1 = 'ER'; // 'gang'を'POP'に置換 $target2 = 'gang'; $replacement2 = 'POP'; $after1 = str_replace($target1, $replacement1, $before); echo '置換1: ' . $after1 . "\n"; $after2 = str_replace($target2, $replacement2, $after1); echo '置換2: ' . $after2 . "\n";
というコードを実行すると、
$ php testReplace.php 置換1: GANGSTER NUMBER 1 置換2: GANGSTER NUMBER 1
と出力され、大文字、小文字が区別されるが、
ファイル名:testReplace2.php <?php // 'GANGSTAR NUMBER 1'という文字列に対して、 $before = 'GANGSTAR NUMBAR 1'; // 'AR'を'ER'に置換 $target1 = 'AR'; $replacement1 = 'ER'; // 'gang'を'POP'に置換 $target2 = 'gang'; $replacement2 = 'POP'; $after1 = str_ireplace($target1, $replacement1, $before); echo '置換1: ' . $after1 . "\n"; $after2 = str_ireplace($target2, $replacement2, $after1); echo '置換2: ' . $after2 . "\n";
というコードを実行すると、
$ php testReplace2.php 置換1: GANGSTER NUMBER 1 置換2: POPSTER NUMBER 1
と、小文字でもマッチして置換してくれる。
また、正規表現を使いたい場合は、preg_replace()を使うのが高速らしい。
ファイル名:testReplace3.php <?php // 'GANGSTAR NUMBER 1'という文字列に対して、 $before = 'GANGSTAR NUMBAR 1'; // 'ANGSTA'を'EEGE'に置換 $target1 = '/A.*?A/'; $replacement1 = 'EEGE'; // 'NUMBER 1'を'No.1'に置換 $target2 = '/n.*$/'; $replacement2 = 'No.1'; // 'NUMBER 1'を'No.1'に置換(大小文字を区別しない) $target3 = '/n.*$/i'; $replacement3 = 'No.1'; $after1 = preg_replace($target1, $replacement1, $before); echo '置換1: ' . $after1 . "\n"; $after2 = preg_replace($target2, $replacement2, $after1); echo '置換2: ' . $after2 . "\n"; $after3 = preg_replace($target3, $replacement3, $after2); echo '置換3: ' . $after3 . "\n";
というコードを実行すると、
$ php testReplace3.php 置換1: GEEGER NUMBER 1 置換2: GEEGER NUMBER 1 置換3: GEEGER No.1
置換2は大小文字を区別するため置換が行われないが、置換3で、target文字列に'i'スイッチをつけると大小文字を区別する。これはPerlなどでも使用する、通常の正規表現記述だ。
*1:次が詳しい- File Not Found -