▼ strpos()
PHP最速の文字探索はstrpos()なので、特定の文字が含まれるかどうかだけ確認したい場合にはこれを使う。
・同系統の関数は以下のとおり
- stripos() ... 大文字小文字を区別しない
- strrpos() ... 文字列末尾から探索する
- strripos() ... 大文字小文字を区別せずに文字列末尾から探索する
特定の文字以降の文字列を取得したい場合はstrstr()を使う。
▼ strstr()
strchr()はエイリアス
見つからなければfalseを返す
・同系統の関数は以下のとおり
- stristr() ... 大文字小文字を区別しない
- strrchr() ... 指定文字が最後に現れる位置以降の文字列を返す。第二引数
▼ strpbrk()
探索文字を複数指定できるstrpbrk()関数
▼ preg_match()
探索には正規表現を使う方法もある。他の関数より重くなるので固定値の探索なら他の関数を使い、それ以外のパターンでマッチさせる処理にこれを使用する。
i修飾子は、大文字小文字を区別しない。
s修飾子は、"."を全ての文字(改行含む)にマッチさせる。
'/foo/'ならfooにマッチする。この開始と終了の"/"文字をデリミタと呼ぶ。
マッチ文字にデリミタと同じ"/"文字が使われていれば"\/"とエスケープするか他の"|"文字などに代えられる。
マッチした部分を配列にセットすることができる。
まず配列$matchの0番目にはパターン全体にマッチした文字がセットされて、1番目にはカッコで囲んだパターンにマッチした文字がセットされることになる。
カッコが複数なら更に2番目3番目と次々にセットされていく。
$matchはタグを含んだ可能性のあるデータなので、画面表示させるときには「< ⇒ <」のようなエンティティ変換をほどこすためにhtmlspecialchars()関数を使っている。
・preg系関数使用の注意点1
パターンを記述していると、偶然PHPタグの終了「?>」とバッティングする記述になる場合があります。
ここまではいいですが、もしこれを記述した行をコメントにするとPHPコードの終了と見なされて以降のコードがまる見えになってしまいます。
・preg系関数使用の注意点2
ダブルクォートで囲って"/\x00/"のようにパターンを指定すると、エスケープシーケンスの中にはうまく動かなくなって警告を出すものもあるのでパターン内に変数展開がなければシングルクォートで囲むこと。
・preg系関数使用の注意点3
末尾を正しくマッチさせる場合はD修飾子を付加するようにする。
正規表現で末尾にマッチする"$"は、改行のあるなしにかかわらずマッチする。
▼ preg_match_all()
記述したパターンがつづく限り繰り返しマッチさせるpreg_match_all()関数
2次元配列にそれぞれマッチした「パターン全体」と「カッコで囲んだ部分」が繰り返しセットされる形になります。
・最短マッチと最長マッチ
パターンを".*"と記述すると最長マッチになり、".*?"と記述すると最短マッチになる。
もしパターン指定が最長マッチだったとすると以下のようになる。
最初に出現した"<b>"から一気に最後の"</b>"までマッチすることになる。
▼ str_replace()
置換処理最速はstr_replace()関数になります。名前からして置換のためにあるような関数です。
スカラーでも配列でも指定することができる。これは便利
・同系統の関数は以下のとおり
- str_ireplace() ... 大文字小文字を区別しない
▼ strtr()
str_replace()に似てる。恐らくstrtr()にできることはstr_replace()でもできるので、より速いstr_replace()を使うようにする。
スカラーで置き換え前後を指定する方法と、配列で指定する方法の2通りの書き方ができる。
▼ substr_replace()
置換対象を文字ではなく位置で指定するのが特徴
置換する位置とその幅を数値で指定する。先頭位置は0から始まる。マイナス値だと末尾位置からになる。
▼ preg_replace()
置換対象文字をパターンで指定できる。置換の回数指定ができるのも特徴
マッチしたパターン全体を$0で参照できるようになる。カッコで囲んだパターンがあれば$1から順にセットされる。
・自動リンク
e修飾子を使うと第二引数をPHPコードとして処理するようになるので、より複雑な処理ができるようになる。
・e修飾子を使った例
これは<b>タグに囲まれた文字の中で、"a"文字があればすべて"A"に置き換える処理
▼ explode()とimplode()
文字列を分割したり、配列データを連結して1つの文字列にするときに使う
explode()の分割結果を受け取るには、list()を使う方法と配列で受ける方法がある。
分割される数があらかじめ分かっている場合はlist()を使うことができる。
join()はimplode()のエイリアス
▼ str_split()
指定した長さに分割
▼ strtok()
文字列をトークンに分割する。
・表示結果
▼ preg_split()
正規表現で文字列を分割する