新井です。 In message "[ruby-list:41686] Re: windowsのDir.globで複数のパターンを空白で区切ると上手く拾えないようです。" on Fri, 9 Dec 2005 11:14:30 +0900, 岩崎 弘孝 <IH000667 / mb.taiyokogyo.co.jp> wrote: > 岩崎です。 > >リファレンスマニュアルを見たらこう書いてあるので、マニュアルを修正する > 必要があると思います。 どのように?以下で良いのかしら? > 分からないこと/怪しい状況に陥った時は最後にはWeb上のリファレンスマニュア > ルを > 参照しているので、なるだけ正確を期していただけると助かります。 正確に書いてあったじゃん。と思いつつ 1.8 ベースの記述に直してみました。 1.9 では配列指定もできるようなのでそのように直しました。
--- Dir[pattern] --- Dir[pattern[, pattern2, ...]] ((<ruby 1.9 feature>)) --- Dir.glob(pattern) --- Dir.glob(pattern) {|file| ...} --- Dir.glob(pattern[, flags]) ((<ruby 1.7 feature>)) --- Dir.glob(pattern[, flags]) {|file| ...} ((<ruby 1.7 feature>)) ワイルドカードの展開を行った結果を文字列の配列として返します。 パターンにマッチするファイルがない場合は空の配列を返します。 p Dir.glob("./b*") => ["./bar", "./baz"] ブロックが与えられたときはワイルドカードにマッチしたファイルを 引数にそのブロックを 1 つずつ評価して (({nil})) を返します Dir.glob("b*") {|f| p f } => "bar" "baz" パターンを "\0" で区切って 1 度に複数のパターンを指定することもで きます。 p Dir.glob("f*\0b*") => ["foo", "bar"] ワイルドカードには以下のものがあります。これらはバックスラッシュに よりエスケープすることができます。(ダブルクォートの文字列中では 2 重にエスケープする必要があることに注意してください) * (({*})) 空文字列を含む任意の文字列と一致します。 * (({?})) 任意の一文字と一致します。 * (({[ ]})) 鈎括弧内のいずれかの文字と一致します。(({-})) でつな がれた文字は範囲を表します。鈎括弧の中の最初の文字が (({^})) である時には含まれない文字と一致します。 ((({^})) の代わりに ksh や POSIX shell のように (({!})) も同じ意 味で使えます。) * (({{ }})) コンマで区切られた文字列の組合せに展開します。例えば、 (({foo{a,b,c}}))は(({fooa})), (({foob})), (({fooc}))に展開されそれぞれに対してマッチ判定を行います。 括弧は入れ子にすることができます。例えば、 (({{foo,bar{foo,bar}}})) は (({foo})), (({barfoo})), (({barbar})) のそれぞれにマッチします。 * (({**/})) ワイルドカード (({*/})) の0回以上の繰り返しを意味し、 ディレクトリを再帰的にたどってマッチを行います。 例えば, (({foo/**/bar})) は (({foo/bar})), (({foo/*/bar})), (({foo/*/*/bar})) ... (以下無限に続く)に対してそれぞれ マッチ判定を行います。 ((<ruby 1.6 feature>)): ruby 1.6 では、"\0" 以外に、空白類(スペース、タブ、改行)でパターン を複数指定できましたが、空白を含むファイル名のマッチングのために ruby 1.7 よりパターンの区切りは "\0" のみとなりました。 ((<ruby 1.9 feature>)): ruby 1.9 では、"\0" 以外に、Dir.glob の第一引数に配列を指定するこ とで複数のパターンを指定できます。Dir[] の場合は、複数の引数で複数 のパターンを指定できます。 p Dir.glob(["f*", "b*"]) # => ["foo", "bar"] p Dir["f*", "b*"] # => ["foo", "bar"] ((<ruby 1.7 feature>)): 省略可能な第二引数には ((<File/File.fnmatch>)) に指定できるフラグ と同様のフラグを指定できます。このフラグを指定することでマッチの挙 動を変更することができます。 -- 新井康司 (Koji Arai)