PHPまとめ - 文字列操作

HOME | TOP

■ 連結

▼ 文字列連結演算子


▼ 変数の展開

スカラー変数の場合と同様に、連想配列でも"A{$hash['head']}B{$hash['tail']}C"のような書き方で変数展開できる。

配列の値を連結する場合はimplode($array)とする。


■ 部分抜き出し

▼ substr();

文字列の部分抜き出し




▼ mb_substr();

マルチバイト対応の文字列の部分抜き出し


■ トリミング

▼ trim()系

前後にある空白文字あるいは指定文字を除去


■ 探索(サーチ,マッチ)

▼ strpos()

PHP最速の文字探索はstrpos()なので、特定の文字が含まれるかどうかだけ確認したい場合にはこれを使う。

・同系統の関数は以下のとおり

特定の文字以降の文字列を取得したい場合はstrstr()を使う。




▼ strstr()

strchr()はエイリアス

見つからなければfalseを返す

・同系統の関数は以下のとおり




▼ strpbrk()

探索文字を複数指定できるstrpbrk()関数




▼ preg_match()

探索には正規表現を使う方法もある。他の関数より重くなるので固定値の探索なら他の関数を使い、それ以外のパターンでマッチさせる処理にこれを使用する。

i修飾子は、大文字小文字を区別しない。
s修飾子は、"."を全ての文字(改行含む)にマッチさせる。

'/foo/'ならfooにマッチする。この開始と終了の"/"文字をデリミタと呼ぶ。
マッチ文字にデリミタと同じ"/"文字が使われていれば"\/"とエスケープするか他の"|"文字などに代えられる。

マッチした部分を配列にセットすることができる。

まず配列$matchの0番目にはパターン全体にマッチした文字がセットされて、1番目にはカッコで囲んだパターンにマッチした文字がセットされることになる。
カッコが複数なら更に2番目3番目と次々にセットされていく。

$matchはタグを含んだ可能性のあるデータなので、画面表示させるときには「< ⇒ &lt;」のようなエンティティ変換をほどこすためにhtmlspecialchars()関数を使っている。



・preg系関数使用の注意点1

パターンを記述していると、偶然PHPタグの終了「?>」とバッティングする記述になる場合があります。
ここまではいいですが、もしこれを記述した行をコメントにするとPHPコードの終了と見なされて以降のコードがまる見えになってしまいます。

・preg系関数使用の注意点2

ダブルクォートで囲って"/\x00/"のようにパターンを指定すると、エスケープシーケンスの中にはうまく動かなくなって警告を出すものもあるのでパターン内に変数展開がなければシングルクォートで囲むこと。

・preg系関数使用の注意点3

末尾を正しくマッチさせる場合はD修飾子を付加するようにする。

正規表現で末尾にマッチする"$"は、改行のあるなしにかかわらずマッチする。




▼ preg_match_all()

記述したパターンがつづく限り繰り返しマッチさせるpreg_match_all()関数

2次元配列にそれぞれマッチした「パターン全体」と「カッコで囲んだ部分」が繰り返しセットされる形になります。



・最短マッチと最長マッチ

パターンを".*"と記述すると最長マッチになり、".*?"と記述すると最短マッチになる。
もしパターン指定が最長マッチだったとすると以下のようになる。

最初に出現した"<b>"から一気に最後の"</b>"までマッチすることになる。


■ 置換

▼ str_replace()

置換処理最速はstr_replace()関数になります。名前からして置換のためにあるような関数です。

スカラーでも配列でも指定することができる。これは便利

・同系統の関数は以下のとおり


▼ strtr()

str_replace()に似てる。恐らくstrtr()にできることはstr_replace()でもできるので、より速いstr_replace()を使うようにする。

スカラーで置き換え前後を指定する方法と、配列で指定する方法の2通りの書き方ができる。




▼ substr_replace()

置換対象を文字ではなく位置で指定するのが特徴

置換する位置とその幅を数値で指定する。先頭位置は0から始まる。マイナス値だと末尾位置からになる。




▼ preg_replace()

置換対象文字をパターンで指定できる。置換の回数指定ができるのも特徴

マッチしたパターン全体を$0で参照できるようになる。カッコで囲んだパターンがあれば$1から順にセットされる。



・自動リンク

e修飾子を使うと第二引数をPHPコードとして処理するようになるので、より複雑な処理ができるようになる。



・e修飾子を使った例

これは<b>タグに囲まれた文字の中で、"a"文字があればすべて"A"に置き換える処理


■ データ変換

▼ chr()とord()


▼ bin2hex()

文字列データを2桁の16進表現に変換しています。




▼ strtolower()とstrtoupper()

■ 分割

▼ explode()とimplode()

文字列を分割したり、配列データを連結して1つの文字列にするときに使う

explode()の分割結果を受け取るには、list()を使う方法と配列で受ける方法がある。

分割される数があらかじめ分かっている場合はlist()を使うことができる。

join()はimplode()のエイリアス




▼ str_split()

指定した長さに分割




▼ strtok()

文字列をトークンに分割する。



・表示結果


▼ preg_split()

正規表現で文字列を分割する


■ 比較

▼ strcmp()

比較する文字数を指定したり、大文字小文字を区別なく比較するものもある。

等しければ0を返す。


■ フォーマット

sprintf

■ 並べ替え

▼ str_shuffle()

文字列をランダムにシャッフルする。




▼ strrev()

文字列を逆順にする。


■ 文字チェック

▼ strlen()

文字列の長さを取得する。




▼ ctype系関数

渡した文字列をチェックする関数

ctype_digit()関数は数値が渡されると偽となる。これも真と見なすのはis_numeric()関数になる。その他似たようなものとして整数型かどうかをチェックするis_int()関数がある。


■ 文字データ生成

▼ str_repeat()

文字列を反復する。




▼ ランダム文字列を作成

最初に割り振るパスワードを自動生成するときなど、似たような文字が含まれると入力トラブルの元になるので、生成した文字列を再処理する。




▼ uniqid()

英数字からなる一意なIDを生成する。

13文字が生成される。

第一引数に指定した文字を頭に付加することができ、第二引数がtrueなら更に複雑に計算した10文字が追加される。


2010(C)Mingw