青山です。

Tue, Mar 16, 1999 at 04:49:30PM +0900 において
Yukihiro Matsumoto さん曰く:

> ふーむ,[ruby-dev:6349]での木村さんのメールでは POSIX では
> . は \n とマッチする方向だからそっちで統一はどうか,というこ
> とですから,現状から . を \n にマッチさせる変更で十分ってこ
> となのかしら?

そのような感じみたいですね。

> |>   * デフォルトはどうするか
> |現在のまま。
> 
> そーなんですかねえ.デフォルトではPerlに合わせることを検討し
> てました.^と\A,$と\Zで挙動が違うような気がしたので.

^ や \A に関しては現在でも Perl と同じですし、Perl にしてもこの2つの
定義はシンプルなんですよね。(man perlre より)

> ^   Match the beginning of the line
> \A  Match at only beginning of string

問題は $ と \Z です。

> $   Match the end of the line (or before newline at the end)
> \Z  Match at only end of string (or before newline at the end)
(この定義でいくと、Perl の s/$/::/g の挙動はやはりおかしいような)

という事で、定義自体も Ruby とは微妙に異なっています。$ はともかく、は
たして \Z はこの定義でいいのか、それとも純粋に文字列の末尾が良いのか。
これに対して、純粋に文字列の末尾を指定したい場合はこのようにしろとあり
ます。

> To match the actual end of the string, not ignoring newline, you can
> use \Z(?!\n).

複雑です>Perl

> |"\n" =~ /\n$/ をどうするかという事が最も難しい問題点ですね。
> 
> ですねえ.これを救済したい気もしますし,スジを通した方が良い
> ような気もします.

上記のように man perlre の定義でいけば文字列の末尾の改行の前にマッチで
すから、本来は Perl でもマッチしないはずなのかもしれませんけれどね。

> ええ,で,Perlが一貫してああなってるのには理由がありそうな気
> がしてならないのです.杞憂?

なのか、あるいは Perl の実装が man perlre と異なっている点からすると見
落としなのか...


-- 
青山 和光 Wakou Aoyama <wakou / fsinet.or.jp>