php正規表現 名前付キャプチャ

2月 23rd, 2010 by admin Leave a reply »

とっても不得意な正規表現。
ちと覚えておくと便利な技をメモっておくぞ。

マッチパターンを参照するときは通常
$matches[0],$matches[1],$matches[2]…などと順番に書いているので
どっかでパターンの変更があった場合は、0から順番に数えなおさなければならんのでメンテナンス性も悪ければ、とても読みにくい。
時間がたてばたつほど、自分で書いたソースなのに追うのが大変になってしまう。

そこでマッチしたパターンに名前を付けれるのを最近知った。

php5.2.2以前と以降で使い方が違うので注意。

$str = 'foobar: 2008';
// PHP 5.2.2 以降で動作します
preg_match('/(?<name>\w+): (?<digit>\d+)/', $str, $matches);
 
// PHP 5.2.2 より前のバージョンではこれを使います
preg_match('/(?P<name>\w+): (?P<digit>\d+)/', $str, $matches);

上の例の出力は以下となります。

print_r($matches);
Array
(
    [0] => foobar: 2008
    [name] => foobar
    [1] => foobar
    [digit] => 2008
    [2] => 2008
)

参考:
php :: 正規表現 :: 名前つきキャプチャというのを習った
http://blog.3ot.net/design/php/20091018012202.html

2010/02/24 リンク修正

Advertisement

5 comments

  1. ふじい より:

    トラックバックをくださり、どうもです。phpのverが5.2.2以降で変わるのですね。どこから変わるのか、詳しく検証してませんでしたので勉強になりました。ところで、せっかくリンクをくださったのですが、urlがちがってます。ソレ、TBのurlでして。わかりにくかったかなあ。エントリのurlはコレです。

    http://blog.3ot.net/design/php/20091018012202.html

  2. admin より:

    あぁほんとだ。すみません><
    ところで、実は僕も中区なんですよ~^^

  3. ふじい より:

    > ところで、実は僕も中区なんですよ~^^

    ええええ?!それはそれは奇遇ですね。びっくりです。大須や鶴舞のへんを茶色いフレンチブルドッグを歩いてるのがいたら、たぶんそれは私です。今後ともよろしくです。

  4. ふじい より:

    失礼!

    (誤) -> 茶色いフレンチブルドッグを歩いてる
    (正) -> 茶色いフレンチブルドッグを連れて歩いてる

  5. admin より:

    こちらこそ今後ともよろしくお願いします^^
    いろいろと情報を共有できると嬉しいです。

    しかしとてもデザイナーさんとは思えないブログですね(笑)

コメントを残す