文字列の取得と置換

substr()

substr()の構文は「substr(対象文字列, 開始位置 [, 取得バイト数]);」です。
substr()は対象文字列の中から文字列を取得します。
対象文字列には一つ以上の文字が必要です。開始位置はstringの0からカウントした位置になります。マイナスを指定した場合はstringの最後尾からカウントした位置になります。開始位置の文字より対象文字列のほうが短いケースではfalseとなります。第三引数はオプションで取得するバイト数を指定でき、省略すると文字列の最後まで取得します。尚、この関数はマルチバイト文字に対応していません。

PHP
1
2
3
4
<?php
$str = "123[PHP]456。";
echo substr($str, 4, 3);
?>
実行結果:PHP

mb_substr()

mb_substr()の構文は「mb_substr(対象文字列, 開始位置 [, 長さ, [エンコーディング]])」です。
mb_substr()はマルチバイト文字に対応しており、対象文字列の一部を取得します。開始位置と長さは半角一文字、全角一文字でカウントされ、バイト単位ではありません。第四引数はオプションで省略した場合は、内部エンコーディングが使われます。

PHP
1
2
3
4
<?php
$str = "大文字のphpを使ってみる。";
echo mb_substr($str, 4, 3);
?>
実行結果:php

mb_strcut()

mb_strcut()の構文は「mb_strcut(対象文字列, 開始位置 [, 長さ, [エンコーディング]])」です。
mb_strcut()は文字列の一部を取得します。mb_substr()と似た方法で部分文字列を取り出しますが、取得単位はバイト単位で、文字単位ではありません。開始位置がマルチバイト文字の2バイト目以降に該当するケースでは、そのマルチバイト文字の最初から切り出されます。第四引数はオプションで省略した場合は、内部エンコーディングが使われます。

PHP
1
2
3
4
5
<?php
$str = "大文字のphpを使ってみる。";
// マルチバイトを一文字3バイトで計算しています。
echo mb_strcut($str, 5, 3);
?>
実行結果:文

mb_strstr()

mb_strstr()の構文は「mb_strstr(対象文字列, 検索文字列 [, 検索文字列除外, [エンコーディング]]);」です。
mb_strstr()は対象文字列の中から指定した検索文字列が最初に出現する部分文字列を探します。第三引数にtrueを指定した場合、対象文字列の先頭から検索文字列が出現する直前の位置までの文字列を返します。その場合、検索文字列は取り除かれます。falseに設定した場合、検索文字列が最初に出現する位置から、検索文字列を含んだ最後まで返します。第三引数を省略するとfalseがデフォルトになります。第四引数を省略すると内部文字エンコーディングが使われます。

PHP
1
2
3
4
<?php
$str = "大文字のphpを使ってみる。";
echo mb_strstr($str, 'php');
?>
実行結果:phpを使ってみる。

mb_stristr()

mb_stristr()の構文は「mb_stristr(対象文字列, 検索文字列 [, 検索文字列除外, [エンコーディング]]);」です。
mb_stristr()は、大文字小文字を区別しない点を除いてmb_strstr()と同じです。

mb_strrchr()

mb_strrchr()の構文は「mb_strrchr(対象文字列, 検索文字列 [, 検索文字列除外, [エンコーディング]]);」です。
mb_strrchr()は対象文字列中から指定した検索文字列が最後に出現する部分文字列を見つけます。この動作はmb_strstr()の反対になります。第三引数にtureを設定すると対象文字列の先頭から検索文字列が最後に出現する位置までを検索文字列を含まないで返します。falseを設定すると検索文字列が最後に出現する位置から対象文字列の最後までを検索文字列を含まないで返します。第四引数は省略すると内部文字エンコーディングが使われます。

PHP
1
2
3
4
<?php
$str = "大文字のphpを使ってみる。";
echo mb_strrchr($str, 'php');
?>
実行結果:phpを使ってみる。

mb_strrichr()

mb_strrichr()の構文は「mb_strrichr(対象文字列, 検索文字列 [, 検索文字列除外, [エンコーディング]]);」です。
mb_strrichr()は、大文字小文字を区別しない点を除いてmb_strrchr()と同じです。

mb_strstrとmb_strrchrに対応するシングルバイト文字関数

strstr(対象文字列, 検索文字列);
stristr(対象文字列, 検索文字列);
strchr(対象文字列, 検索文字列);
strrchr(対象文字列, 検索文字列);
いずれもマルチバイトに対応していません。また、mb_strrichr()に対応するシングルバイト文字の関数は現在のところありません。

str_replace()

str_replace()の構文は「str_replace(置換前の文字, 置換後の文字, 対象文字列 [, 置換回数の格納]);」です。
str_replace()は検索した文字列(置換前の文字列)にマッチする全ての文字列(置換後の文字)を置換します。置換後の文字が置換前の文字より少ない場合、置換される予定だった残りの部分に空白が入ります。また、第一引数と第二引数には文字列の他、文字列を保存した配列を指定することもできます。この場合、第一引数が配列で第二引数に文字列を使うのが普通です。オプションの第四引数には一致して置換された数が格納されます。尚、UTF-8を使っている場合はマルチバイト文字でも認識するようです。

PHP
1
2
3
4
<?php
$str = "html and css. Touch the code.";
echo str_replace('code', 'design', $str);
?>
実行結果:html and css. Touch the design.
PHP
1
2
3
4
5
6
<?php
$str = "html and css. Touch the code.";
$a=array('html','css');
$b=array('jQuery','php');
echo str_replace($a, $b, $str);
?>
実行結果:jQuery and php. Touch the code.

str_ireplace()

str_ireplace()は大文字小文字を区別しない点を除けば、str_replace()の構文と同じです。

substr_replace()

substr_replace()の構文は「substr_replace(対象文字列, 置換後の文字列, 開始位置 [, 置換範囲]);」です。
substr_replace()は文字列の一部を置き換えます。第三引数は対象文字列で前方からの開始位置を指定しますが、マイナスの場合は終端から数えます。第四引数は省略すると終端まで置換します。整数の値を設定した場合、置換される長さを指定することになります。マイナスであれば置換を停止する位置が最後尾から何文字目なのかを指定することになります。

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php
$str = 'abcdefg';
// $str文字列の最初の4番目から終端までの文字列をhijに置き換えます。
echo substr_replace($str, 'hij',3).'。';
// $str文字列の最初の1番目から終端の文字までをhijに置き換えています。
echo substr_replace($str, 'hij', 0).'。';
// $str文字列の最初の1番目の文字の前にhijを追加します。
echo substr_replace($str, 'hij', 0, 0).'。';
// $str文字列の最初から8番目に当たる位置からhijを追加しています。
echo substr_replace($str, 'hij', 7, 0).'。';
// $str文字列の最初から3番目と最後尾から3番目の間の文字がhijに置き換えられます。
echo substr_replace($str, 'hij', 2, -2).'。';
// $str文字列の最後尾から6番目と、同じく$strの最後尾から数えて4番目の文字(cd)がhijに置き換えられます。
echo substr_replace($str, 'hij', -5, -3).'。';
?>
実行結果:abchij。hij。hijabcdefg。abcdefghij。abhijfg。abhijefg。

preg_replace()

preg_replace()の構文は「preg_replace(パターン, 置換後の文字, 対象文字列 [, 最大置換回数, [置換回数の格納]]);」です。
パターンには文字列か配列を指定することができ、正規表現と修飾子が使えます。パターンに一致しなかった場合は、対象文字列をそのまま返します。第四引数以降はオプションで省略できます。尚、改行を消す際、「preg_replace("/[\r\n]/", "", 対象文字列);」は、「str_replace(array("\r", "\n"), "", 対象文字列);」に変えたほうが処理が速いようです。

PHP
1
2
3
<?php
echo preg_replace('/([A-Z]{1,3})/', '$1とCSS', 'jqueryとPHPを使ってみる');
?>
実行結果:jqueryとPHPとCSSを使ってみる

strtr()

書式は、二つの方法があります。
「strtr(対象文字列, 検索文字, 置換後の文字);」
「strtr(対象文字列, 連想配列);」
引数を三つ渡す場合は、検索文字と置換文字の長さを同じにします。検索文字と置換後の文字の長さが違えば、長い方の余った文字は取り除かれます。引数を二つだけ渡す場合は、連想配列にします。対象文字列の中に存在する配列のキーとそれに対応させた値で置き換えられた文字列が返されます。一度置き換えられた文字列は再度置き換えられることはありません。また、配列のキーは最も長い文字列のキーから順番に探していきます。更に配列とキーはその長さを自由に変更できます。ただし、キーは空にできません。

PHP
1
2
3
4
<?php
$str = 'abcd';
echo strtr($str, 'ac', 'AC');
?>
実行結果:AbCd
PHP
1
2
3
4
5
6
7
8
9
10
<?php
$str = 'a,b,c,d';
$a=array(
"a" => "1",
"b" => "2",
"c" => "3",
"d" => "4",
);
echo strtr($str, $a);
?>
実行結果:1,2,3,4

strrev()

strrev()の構文は「strrev(対象文字列);」です。
strrev()は対象文字列の前と後ろを逆にして並び替えます。

PHP
1
2
3
4
<?php
$str = 'abcdefg';
echo strrev($str);
?>
実行結果:gfedcba