當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


Ruby File.fnmatch用法及代碼示例


本文簡要介紹ruby語言中 File.fnmatch 的用法。

用法

fnmatch( pattern, path, [flags] ) → (true or false)
也別名為:fnmatch?

如果 pathpattern 匹配,則返回 true。模式不是正則表達式;相反,它遵循類似於 shell 文件名通配符的規則。它可能包含以下元字符:

*

匹配任何文件。可以被 glob 中的其他值限製。相當於正則表達式中的/.*/x

*

匹配所有常規文件

c*

匹配所有以c 開頭的文件

*c

匹配所有以 c 結尾的文件

*c*

匹配所有包含 c 的文件(包括開頭或結尾)。

要匹配隱藏文件(以 . 開頭)設置 File::FNM_DOTMATCH 標誌。

**

遞歸匹配目錄或擴展文件。

?

匹配任何一個字符。相當於正則表達式中的/.{1}/

[set]

匹配 set 中的任何一個字符。行為與 Regexp 中的字符集完全相同,包括集合否定 ([^a-z])。

\

轉義下一個元字符。

{a,b}

如果啟用了 File::FNM_EXTGLOB 標誌,則匹配模式 a 和模式 b。行為類似於 Regexp 聯合 ((?:a|b) )。

flagsFNM_XXX 常量的按位或。 Dir::glob 使用相同的全局模式和標誌。

例子:

File.fnmatch('cat',       'cat')        #=> true  # match entire string
File.fnmatch('cat',       'category')   #=> false # only match partial string

File.fnmatch('c{at,ub}s', 'cats')                    #=> false # { } isn't supported by default
File.fnmatch('c{at,ub}s', 'cats', File::FNM_EXTGLOB) #=> true  # { } is supported on FNM_EXTGLOB

File.fnmatch('c?t',     'cat')          #=> true  # '?' match only 1 character
File.fnmatch('c??t',    'cat')          #=> false # ditto
File.fnmatch('c*',      'cats')         #=> true  # '*' match 0 or more characters
File.fnmatch('c*t',     'c/a/b/t')      #=> true  # ditto
File.fnmatch('ca[a-z]', 'cat')          #=> true  # inclusive bracket expression
File.fnmatch('ca[^t]',  'cat')          #=> false # exclusive bracket expression ('^' or '!')

File.fnmatch('cat', 'CAT')                     #=> false # case sensitive
File.fnmatch('cat', 'CAT', File::FNM_CASEFOLD) #=> true  # case insensitive
File.fnmatch('cat', 'CAT', File::FNM_SYSCASE)  #=> true or false # depends on the system default

File.fnmatch('?',   '/', File::FNM_PATHNAME)  #=> false # wildcard doesn't match '/' on FNM_PATHNAME
File.fnmatch('*',   '/', File::FNM_PATHNAME)  #=> false # ditto
File.fnmatch('[/]', '/', File::FNM_PATHNAME)  #=> false # ditto

File.fnmatch('\?',   '?')                       #=> true  # escaped wildcard becomes ordinary
File.fnmatch('\a',   'a')                       #=> true  # escaped ordinary remains ordinary
File.fnmatch('\a',   '\a', File::FNM_NOESCAPE)  #=> true  # FNM_NOESCAPE makes '\' ordinary
File.fnmatch('[\?]', '?')                       #=> true  # can escape inside bracket expression

File.fnmatch('*',   '.profile')                      #=> false # wildcard doesn't match leading
File.fnmatch('*',   '.profile', File::FNM_DOTMATCH)  #=> true  # period by default.
File.fnmatch('.*',  '.profile')                      #=> true

File.fnmatch('**/*.rb', 'main.rb')                  #=> false
File.fnmatch('**/*.rb', './main.rb')                #=> false
File.fnmatch('**/*.rb', 'lib/song.rb')              #=> true
File.fnmatch('**.rb', 'main.rb')                    #=> true
File.fnmatch('**.rb', './main.rb')                  #=> false
File.fnmatch('**.rb', 'lib/song.rb')                #=> true
File.fnmatch('*',     'dave/.profile')              #=> true

File.fnmatch('**/foo', 'a/b/c/foo', File::FNM_PATHNAME)     #=> true
File.fnmatch('**/foo', '/a/b/c/foo', File::FNM_PATHNAME)    #=> true
File.fnmatch('**/foo', 'c:/a/b/c/foo', File::FNM_PATHNAME)  #=> true
File.fnmatch('**/foo', 'a/.b/c/foo', File::FNM_PATHNAME)    #=> false
File.fnmatch('**/foo', 'a/.b/c/foo', File::FNM_PATHNAME | File::FNM_DOTMATCH) #=> true

相關用法


注:本文由純淨天空篩選整理自ruby-lang.org大神的英文原創作品 File.fnmatch。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。