[#41630] [ANN] langhelp-0.9.0 — rubikitch@...
るびきちです。
7 messages
2005/12/01
[#41654] Hashを継承したクラスの利用方法について — saitani <cxj15527@...>
お世話になります。
9 messages
2005/12/04
[#41720] Tempfile#== — とみたまさひろ <tommy@...>
とみたです。
5 messages
2005/12/21
[#41728] ruby 1.8.4 released — Yukihiro Matsumoto <matz@...>
まつもと ゆきひろです
9 messages
2005/12/24
[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)