概要
File.fnmatchメソッドを使用すると、与えられたファイル名がパターンにマッチするか確認できます。
特定のファイル名のみ受け付けるなどの処理に有効です。(特定の文字から始まるファイル名しか受けつけないなど)
記載方法
- fnmatch(pattern, path, flags = 0) -> bool
- fnmatch?(pattern, path, flags = 0) -> bool
例
%w(foo foobar bar).each {|f|
p File.fnmatch("foo*", f)
}
# => true
# true
# false
p File.fnmatch("ruby*", "rubytest.txt") # => true
p File.fnmatch("ruby*", "javatest.txt") # => false
注意事項
パターンで使用できるワイルドカードの一覧は以下の通りです。
正規表現ではないため注意が必要。
指定方法 | 動作 |
---|---|
* | 任意の0文字以上にマッチ |
? | 任意の1文字にマッチ |
[] | []で囲んだ文字のいずれかにマッチ |
またflagsを指定することにより、パターンマッチの動作を変更可能となる
定数 | 動作 |
---|---|
FNM_NOESCAPE | エスケープ文字 「\」 を普通の文字とみなす |
FNM_PATHNAME | ワイルドカード 「*」, 「?」, 「[]」 が 「/」 にマッチしなくなる |
FNM_CASEFOLD | アルファベットの大小文字を区別せずにパターンマッチを行う |
FNM_DOTMATCH | ワイルドカード 「*」, 「?」, 「[]」 が先頭の 「.」 にマッチする |
FNM_EXTGLOB | {} 内のコンマで区切られた文字列の組合せにマッチするようになる。例えば、foo{a,b,c} は fooa, foob, fooc に展開されそれぞれに対してマッチ判定を行います。 |