[#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:39335] Re: File.fnmatch の改良について

From: "U.Nakamura" <usa@...>
Date: 2004-03-05 16:45:36 UTC
List: ruby-list #39335
こんにちは、なかむら(う)です。

In message "[ruby-list:39329] Re: File.fnmatch   の改良について"
    on Mar.05,2004 21:23:53, <ocean@m2.ccsnet.ne.jp> wrote:
| >|   ・'[' と ']' の間では、FNM_NOESCAPE の有無にかかわらず、エスケープは効かない。
| >
| >これはSUSv3ではどうなんでしょう?
| >「エスケープしない」か、「規定なし」か。
| >
| >というのは、私の知っているとあるfnmatch実装はFNM_NOESCAPEがな
| >い場合、エスケープが効くので。
| 
| http://www.unix.org/single_unix_specification/ から閲覧可能な SUSv3 の RE Bracket Expression の項に、
| 
|   The special characters '.' , '*' , '[' , and '\' (period, asterisk, left-bracket, and backslash, respectively)
|   shall lose their special meaning within a bracket expression.
| 
| とあります。ファイルマッチルールは領域指定については RE を継承しているようなので、
| たぶん間違いないと思います。

仰るとおりのように読めますね。むーん。


In message "[ruby-list:39331] Re: File.fnmatch   の改良について"
    on Mar.05,2004 21:37:56, <ocean@m2.ccsnet.ne.jp> wrote:
| 山本です。
| 
| >>|   ・'[a-b-c]' のように '-' でつなぐパターンは SUSv3 では未定義
| >>|     この実装では '[a-bb-c]' と解釈している
| >>
| >>えーと、'[a-bc-]'と解釈されるほうが私は好きです。
| >
| >'[a-b-cd]' は '[a-bcd-]' ということでしょうか?
| 
| ただ、SUSv3 には
| 
|   The interpretation of range expressions where the ending range point is also the starting range point of
|   a subsequent range expression (for example, "[a-m-o]" ) is undefined.
| 
| とあって、'[a-b-c]' は 'b' が 'a-b' の終点でもあり、'b-c' の始点でもある、という風に表現してあるので、
| '[a-bc-]' という解釈はどうなのか・・・

それは「そういう範囲表現をどう実装するかは定義しない」と書い
てあるだけでしょう。
てゆーか文章で書くにはそう書くしかないだろうし。


さて、
気を取り直してSUSv3を調べ、その上でNetBSD・Mac OS X・glibcの
各実装を調査して、ついでに可能な限り他のUNIX系OSのオンライン
マニュアルなどを調べた上で述べますが、

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じゃないよ」と書いてありますしね :)


それでは。
-- 
U.Nakamura <usa@garbagecollect.jp>



In This Thread