本文簡要介紹ruby語言中 File.fnmatch
的用法。
用法
fnmatch( pattern, path, [flags] ) → (true or false)
也別名為:fnmatch?
如果 path
與 pattern
匹配,則返回 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)
)。
flags
是 FNM_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 File.ftype用法及代碼示例
- Ruby File.flock用法及代碼示例
- Ruby File.identical?用法及代碼示例
- Ruby File.dirname用法及代碼示例
- Ruby File.directory?用法及代碼示例
- Ruby File.link用法及代碼示例
- Ruby File.expand_path用法及代碼示例
- Ruby File.lstat用法及代碼示例
- Ruby File.umask用法及代碼示例
- Ruby File.absolute_path?用法及代碼示例
- Ruby File.rename用法及代碼示例
- Ruby File.split用法及代碼示例
- Ruby File.chmod用法及代碼示例
- Ruby File.atime用法及代碼示例
- Ruby File.to_path用法及代碼示例
- Ruby File.stat用法及代碼示例
- Ruby File.chown用法及代碼示例
- Ruby File.path用法及代碼示例
- Ruby File.absolute_path用法及代碼示例
- Ruby File.mtime用法及代碼示例
- Ruby File.build用法及代碼示例
- Ruby File.join用法及代碼示例
- Ruby File.readlink用法及代碼示例
- Ruby File.new用法及代碼示例
- Ruby File.world_writable?用法及代碼示例
注:本文由純淨天空篩選整理自ruby-lang.org大神的英文原創作品 File.fnmatch。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。