[#47049] fileのopenに関する動作についての質問 — 高橋作郎 <sakurou3960@...>

はじめまして。

14 messages 2010/05/04

[ruby-list:47065] Re: match メソッドの pos オプションを指定した場合の \A のマッチ

From: "NARUSE, Yui" <naruse@...>
Date: 2010-05-06 06:14:21 UTC
List: ruby-list #47065
成瀬です。

2010年5月6日14:37 KISHIMOTO, Makoto <ksmakoto@dd.iij4u.or.jp>:
> ※ 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[^>]*\?><foo>|<bar>/ などでは
1つ目のパターンでは本当に文字列先頭の時だけにマッチさせたいわけですから、
途中でマッチしては困ります。
そのようなユースケースが想定される以上、その場合のための手段は提供されるべきでしょう。

また、仰るような開始位置の先頭に対して作用する要素にはすでに \G が存在します。

よって、\A の意味変更は代替手段がなく、仰る用途にはすでにそれ用の \G があるので、
現状のままで正しいと思います。

-- 
NARUSE, Yui
naruse@airemix.jp

In This Thread