[ruby-list:41689] Re: windowsのDir.globで複数のパターンを空白で区切ると上手く拾えないようです。

From: Koji Arai <jca02266@...>
Date: 2005-12-10 11:00:24 UTC
List: ruby-list #41689
新井です。

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)

In This Thread

Prev Next