[#39325] File.fnmatch の改良について — "H.Yamamoto" <ocean@...2.ccsnet.ne.jp>

はじめまして、山本です。

18 messages 2004/03/05

[#39429] trial version of Ruby/Tk — Hidetoshi NAGAI <nagai@...>

永井@知能.九工大です.

18 messages 2004/03/23
[#39454] Re: trial version of Ruby/Tk — "Shirai,Kaoru" <shirai@...> 2004/03/31

白井です。

[#39460] Re: trial version of Ruby/Tk — Hidetoshi NAGAI <nagai@...> 2004/04/01

永井@知能.九工大です.

[#39465] Re: trial version of Ruby/Tk — "Shirai,Kaoru" <shirai@...> 2004/04/01

白井です。

[#39466] Re: trial version of Ruby/Tk — Hidetoshi NAGAI <nagai@...> 2004/04/01

永井@知能.九工大です.

[#39453] Re: int/int in Ruby2? — Masaaki Sakano <mas@...>

坂野 正明です。

36 messages 2004/03/31
[#39455] Re: int/int in Ruby2? — NISHIMATSU Takeshi <t-nissie@...> 2004/03/31

西松と申します.

[#39470] Re: int/int in Ruby2? — Masaaki Sakano <mas@...> 2004/04/01

坂野 正明です。

[#39473] Re: int/int in Ruby2? — matz@... (Yukihiro Matsumoto) 2004/04/01

まつもと ゆきひろです

[#39484] Re: int/int in Ruby2? — Masaaki Sakano <mas@...> 2004/04/03

坂野 正明です。

[#39528] Re: int/int in Ruby2? — "T Akutsu" <locrian@...> 2004/04/09

あくつです。なんかわくわくしてきだぞ。(^^;)

[ruby-list:39336] Re: File.fnmatch の改良について

From: "H.Yamamoto" <ocean@...2.ccsnet.ne.jp>
Date: 2004-03-06 05:52:58 UTC
List: ruby-list #39336
山本です。

>こんにちは、なかむら(う)です。
>
>SUSv3準拠、というのがこういう仕様なら、RubyのFile.fnmatchは
>SUSv3に準拠しなくてよい。
>
>というのが私の結論です。
>
>FNM_NOESCAPEなしの場合、[]内でも\がエスケープを意味する方が
>ルールとしては一貫していてわかりやすいと思います。
>Rubyの正規表現のルールとも一致するし。
>実際、SUSv3の記述を読むと、そもそも正規表現(基本・拡張とも)で
>すら、[]内では\はエスケープを意味しないことになっています。
>これに対し、HP-UXやQNXなどではわざわざ[]内でも\はエスケープを
>意味する旨がmanに追記されていますし、上に上げた各OS(というか
>ライブラリ)のfnmatch(3)の実装でも[]内の\はエスケープを意味し
>ています。
>この世の全てのfnmatch実装を確認したわけではないので断言はでき
>ませんが、かような現状から、わざわざ[]内の\をエスケープを意味
>しないように変更することにメリットがあるとは思えません。
>
>もう一つ、FNM_PATHNAMEをデフォルトにする件ですが、これも反対
>です。
>理由は[ruby-list:39328]で青木さんが仰ったのと同じです。
>SUSv3にも「fnmatchという名前なのはfile name matchという意味で
>あってpath name matchじゃないよ」と書いてありますしね :)

納得しました。情報ありがとうございました。
BeOSのbashで確認したところ、[\*] はやはりエスケープとして
働いてました。[a-b-c] も、なかむらさんの仰るように [a-bc-] として働いてました。
(fnmatch(3) もそう働いているということでいいでしょうか?)

申し訳ありませんが、最後に三つ知りたいことがあります。

第一に、FNM_PATHNAME のときの [a/c] の解釈です。

bash では [a/c] は '[a' + '/' + 'c]' として解釈していて、

E:\ruby-cvs>miniruby_1_8 -e "puts File.fnmatch('[a/c]', '[a/c]', File::FNM_PATHNAME)"
false

E:\ruby-cvs>miniruby_1_8 -e "puts File.fnmatch('[a/c]', 'a', File::FNM_PATHNAME)"
true

という File.fnmatch の動作と異なっています。fnmatch(3) はどう振舞ってますか?

第二に、DOSISH は不完全な気がするので、少なくともパターンでは '/' のみとしたいのですが、
こちらはどうでしょうか?

E:\ruby-cvs>miniruby_1_8 -e "puts File.fnmatch('a\b', 'a\b', File::FNM_PATHNAME)"
true

E:\ruby-cvs>miniruby_1_8 -e "puts File.fnmatch('a\[b]', 'a\b', File::FNM_PATHNAME)"
false

E:\ruby-cvs>miniruby_1_8 -e "puts File.fnmatch('a\\\[b]', 'a\b', File::FNM_PATHNAME)"
true

第三に、FNM_PERIOD を復活させたほうがいいのでしょうか?それとも今のまま FNM_DOTMATCH でしょうか?


In This Thread