From: "NARUSE, Yui" Date: 2010-05-06T15:14:21+09:00 Subject: [ruby-list:47065] Re: match メソッドの pos オプションを指定した場合の \A のマッチ 成瀬です。 2010年5月6日14:37 KISHIMOTO, Makoto : > ※ String#match の rdoc がオプショナル引数に対応してないようです こちらは r27639 で反映しました。 パッチありがとうございました。 > ruby 1.9 の Regexp#match および String#match のオプショナル引数で、 > 開始位置を指定した場合の \A のマッチについてなのですが、現在の実装では、 > \A はあくまでも文字列の先頭にのみマッチし、開始位置にはマッチしません。 > > $ irb19 > irb(main):001:0> "foo".match /\A/, 1 > => nil > > 文字列の中に現れるパターンを、開始位置をずらしながらなめるような処理を > 書く時に、開始位置でのみマッチさせたい、というわけで、マッチしてくれた > ほうがうれしいように思うのですが、現在の実装が意図したもので、仕様という > ことなんでしょうか? こちらは現在の仕様で正しいと思います。 開始位置をずらしながらなめるような処理において、1つの正規表現で文字列先頭用と 途中用のパターンを含ませた場合、例えば /\A<\?xml[^>]*\?>|/ などでは 1つ目のパターンでは本当に文字列先頭の時だけにマッチさせたいわけですから、 途中でマッチしては困ります。 そのようなユースケースが想定される以上、その場合のための手段は提供されるべきでしょう。 また、仰るような開始位置の先頭に対して作用する要素にはすでに \G が存在します。 よって、\A の意味変更は代替手段がなく、仰る用途にはすでにそれ用の \G があるので、 現状のままで正しいと思います。 -- NARUSE, Yui naruse@airemix.jp