文字列の操作
文字列操作の関数一覧 ▲
関数 | 用途 |
---|---|
strlen/mb_srtlen | 文字列の長さを得る |
trim/ltrim/rtrim | 文字列の先頭や末尾からホワイトスペースを取り除く |
strpos | 文字列内の部分文字列が最初に現れる位置を見つける |
preg_match | 正規表現によって文字列内に部分文字列が含まれているか確認する |
str_replace/str_ireplace | 文字列を置換する |
preg_replace | 正規表現によって文字列を置換する |
str_repeat | 文字列を反復する |
substr/mb_substr | 指定した文字列から任意の範囲を取り出す |
substr_count | 対象文字列から指定した文字列が何回登場するかを取得する |
str_split | 一定の長さで文字列を分割する |
preg_split | 正規表現で文字列を分割する |
explode | 文字列を文字列により分割する |
implode | 配列要素を文字列により連結する |
文字列の長さを得る strlen/mb_strlen ▲
strlen(string $string): int
与えられた $string の長さ(バイト数)を返す
なお日本語(マルチバイト文字)を操作する場合は mb_strlen() を使うこと
文字列の先頭や末尾からホワイトスペースを取り除く trim/ltrim/rtrim ▲
trim(string $string, string $characters = " \n\r\t\v\x00"): string
与えられた $string の先頭や末尾から $characters で指定された空白文字を取り除いた文字列を返却する
l(eft)trim と r(ight)trim があり、それぞれ先頭から除外、末尾から除外の違いがある
$characters の指定がない場合はデフォルトで下記の文字を削除する
" " (ASCII 32 (0x20)), 通常の空白。 "\t" (ASCII 9 (0x09)), タブ。 "\n" (ASCII 10 (0x0A)), リターン。 "\r" (ASCII 13 (0x0D)), 改行。 "\0" (ASCII 0 (0x00)), NULバイト "\v" (ASCII 11 (0x0B)), 垂直タブ
文字の検索 strpos ▲
strpos(string $haystack, string $needle, int $offset = 0): int|false
$haystack の文字列から $needle が最初に現れる位置を見つける
PHP8.0.0より前のバージョンでは $needle が文字列でない場合、数値に変換され、文字の通常の値として扱われていた
この振る舞いは現在では推奨されていないため、明示的にキャストするなどで対応すること
$offset 指定すると検索開始位置が $offset の位置からになる
$offset が負の場合は文字列の終端から $offset 分戻った位置から検索開始となる
$text = 'abc';
$search = 'a';
$pos = strpos($text, $search);
// $pos は 0 もあり得るため、true/false判定を行う場合は必ず === で型まで確認すること
if( $pos === false ) {
echo "文字列 '$search' は、文字列 '$text' の中で見つかりませんでした";
} else {
echo "文字列 '$search' が文字列 '$text' の中で見つかりました";
echo " 見つかった位置は $pos です";
}
正規表現でマッチングする preg_match ▲
preg_match(
string $pattern,
string $subject,
array &$matches = null,
int $flags = 0,
int $offset = 0
): int|false
$pattern で指定した正規表現により $subject を検索する
$matches を指定した場合は検索結果が代入される。 $matches[0] にはパターン全体にマッチしたテキストが代入され、 $matches[1] には 1 番目のキャプチャ用サブパターンにマッチした 文字列が代入され、といったように順に返却される。
$flags 返却の内容をフラグによって制御できる。詳細は公式ドキュメントを参照
$offset 開始位置のオフセット
単純な文字列の検索であれば strpos() を使用したほうが処理が速いので注意する
文字列を置換する str_replace/str_ireplace ▲
str_replace(
array|string $search,
array|string $replace,
string|array $subject,
int &$count = null
): string|array
$search の文字列または配列を $subject 内から検索して $replace に置換する
$search が配列で $replace も配列の場合は順に置換される。$replace の要素数が足りない場合は空文字となる。
$search が配列で $replace が文字列の場合は全て $replace の文字列に置換される
$search が文字列で $replace が配列の場合は意味がない
$count この引数が指定されると置換回数が渡される
str_ireplace() の場合は大文字小文字が区別されない違いがある
正規表現で置換する preg_replace ▲
preg_replace(
string|array $pattern,
string|array $replacement,
string|array $subject,
int $limit = -1,
int &$count = null
): string|array|null
$pattern で指定した正規表現により $subject を検索して $replacement に置換する
$matches を指定した場合は検索結果が代入される。 $matches[0] にはパターン全体にマッチしたテキストが代入され、 $matches[1] には 1 番目のキャプチャ用サブパターンにマッチした 文字列が代入され、といったように順に返却される。
$limit 置換を行う最大回数
$count この引数が指定されると置換回数が渡される
単純な文字列の置換であれば str_replace() または str_ireplace() を使用したほうが処理が速いので注意する
文字列を反復する str_repeat ▲
str_repeat(string $string, int $times): string
$string を $times 回繰り返した文字列を返す。
$times は0以上でなければいけない。0の場合は空文字列が返却される
文字の切り出し substr/mb_substr ▲
substr(string $string, int $offset, ?int $length = null): string
$string の文字列から $offset の位置を基準に $length 分の文字を切り出す
$offset が負の場合は後ろから数えて $offset 番目から始まる文字列になる
$length を省略した場合は文字列の最後までになる
$length が負の場合は文字列の終端から $length 数分の文字が省略される
$res = substr("abcdef", 2); // "cdef" を返す
$res = substr("abcdef", -1); // "f" を返す
$res = substr("abcdef", -3, 1); // "d" を返す
$res = substr("abcdef", 0, -1); // "abcde" を返す
なお日本語(マルチバイト文字)を操作する場合は mb_substr() を使うこと
文字の出現回数を返す substr_count ▲
substr_count(
string $haystack,
string $needle,
int $offset = 0,
?int $length = null
): int
文字列 &haystack の中での副文字列 &needle の出現回数を返す。大文字小文字は区別される。
$offset 開始位置のオフセット
$offset が負の場合は文字列の末尾から数える
$length 指定したオフセット以降に副文字列で検索する最大長
$length が負の場合は文字列の末尾から $length 数分の文字が省略される
$offset + $length が文字列の長さを超える場合は警告が発生する
$text = 'This is a test';
echo substr_count($text, 'is'); // 2
// テキストは 's is a test' になっているので, 1 が表示される
echo substr_count($text, 'is', 3);
// テキストは 's i' になっているので, 0 が表示される
echo substr_count($text, 'is', 3, 3);
// テキストは 'is is' になっているので, 2 が表示される
echo substr_count($text, 'is', 2, -7);
一定の長さで文字列を分割する str_split ▲
str_split(string $string, int $length = 1): array
$length の長さで文字列 $string を分割します
平等に分割できない場合、 最後の要素だけはその長さより短くなります
$str = "Hello Friend";
// 1文字ずつ分割された配列になる[ 'H', 'e', 'l', 'l', 'o', ' ', 'F', 'r', 'i', 'e', 'n', 'd' ]
$arr1 = str_split($str);
// 5文字ずつ分割された配列になる[ 'Hello', ' Frie', 'nd' ]
$arr2 = str_split($str, 5);
正規表現で文字列を分割する preg_split ▲
preg_split(
string $pattern,
string $subject,
int $limit = -1,
int $flags = 0
): array|false
正規表現 $pattern に従って $subject の文字列を分割する
$limit が正のとき $limit 個の部分文字列を配列として返す。残りの文字列は、最後の部分文字列に含めて返される
$limit が負または0のときは制限がないことを意味する
$flags 返却の内容をフラグによって制御できる。詳細は公式ドキュメントを参照
文字列を文字列で分割する explode ▲
explode(string $separator, string $string, int $limit = PHP_INT_MAX): array
文字列 $string を分割文字列 $separator で分割して返す
$limit が正の場合、返却される配列は最大で $limit 個の要素が含まれる。最後の要素は $string の残り部分全てが含まれる
$limit が負の場合、最後から $limit 個の要素が除かれて返却される
$limit が 0 の場合は 1 を指定したものとみなされる
配列要素を文字列で連結する implode ▲
implode(string $separator, array $array): string
配列 $array の要素を $separator で連結する
目次