グルーピングに使う()で不便なこと
正規表現を書くときに、
/(aaa)([0-9])(aaa)/
このように、ひとつのまとまりを表現するために、 ()
を使うときがあります。
しかしこのとき、結果を \1
などで選択するときには、 ()
の数を数えて、何番目かを確かめないといけないです。
今回だと、2番目・・・みたいに考えるのは面倒。(aaa)とか数える順番から除外したい。
php > $text = "aaa2aaa3aaa";
php > preg_match("/(aaa)([0-9])(aaa)/", $text, $matches); php > var_dump($matches); array(4) { [0]=> string(7) "aaa2aaa" [1]=> string(3) "aaa" [2]=> string(1) "2" [3]=> string(3) "aaa" }
これ嫌ですよね。
()内で?:を使う
php > preg_match("/(?:aaa)([0-9])(?:aaa)/", $text, $matches); php > var_dump($matches); array(2) { [0]=> string(7) "aaa2aaa" [1]=> string(1) "2" }
?:を使ったときには順番から除外されていますね!
結構便利φ(・・