LoginSignup
0
0

More than 1 year has passed since last update.

【Ruby】ファイル名がパターンにマッチするか調べたい時

Last updated at Posted at 2022-10-10

概要 

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 に展開されそれぞれに対してマッチ判定を行います。

参考

0
0
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0