Hatena::ブログ(Diary)

absunの動向 このページをアンテナに追加 RSSフィード

2011-04-09

splitの代替はexplodeではない、preg_split

| 16:23 | splitの代替はexplodeではない、preg_splitを含むブックマーク splitの代替はexplodeではない、preg_splitのブックマークコメント

php文字列を特定の文字などで分割する時にsplitやexplodeを使うのですが、

PHP5.3からはsplitが非推奨となりました。

http://php.net/manual/ja/function.split.php

あまりにもでっかく非推奨って書いてあるもんだから、これはまあ「非推奨なんだ、そうなったんだ」くらいの認識でとりあえずいいんです。


でも「なんで?」って聞かれるとわからなかったので調べました。

そしたら上記ページのもうちょい下にちゃんと書いてありました。よく読めってことですね…。


自分もずっと何故か勘違いしてたんですよね。ソースは失念したんですがどこかで「splitの代替はexplode」みたいな記事を読んだことがあり、上記の事柄と合わせて「splitは非推奨だし、代替はexplodeでおk」と完全に誤認してました。


PHPのsplit関数正規表現パターンで文字列を分割します。

explode関数は単純に文字列を指定して分割します。


splitが非推奨となって、じゃあ何に置き換えるのが正しいかといえば、当然機能が違うのでexplodeではないというのはわかります。

ここで出てくるのがpreg_split関数です。


Perlにsplit関数があるせいで多分このあたりごっちゃになるんだと勝手に思ってるんですが、

PHPが採用している正規表現は複数あり、PHPのsplit関数が内部で使用するのはPOSIX正規表現です。

これはPerl互換の正規表現とは違うものです。


PHPのバージョンが上がり続ける中でPOSIX正規表現自体が非推奨となった(regex拡張モジュールが非推奨となった)関係で、

PCREモジュールのPerl互換正規表現を使用するpreg_split関数を使うようにしなくてはならないということですね。