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


Ruby Dir.glob用法及代碼示例


本文簡要介紹ruby語言中 Dir.glob 的用法。

用法

glob( pattern, [flags], [base: path] [, sort: true] ) → array
glob( pattern, [flags], [base: path] [, sort: true] ) { |filename| block } → nil

擴展 pattern ,這是一個模式字符串或模式字符串的 Array ,並返回一個包含匹配文件名的數組。如果給定了一個塊,則為每個匹配的文件名調用一次該塊,將文件名作為參數傳遞給該塊。

可選的 base 關鍵字參數指定用於解釋相對路徑名的基本目錄,而不是當前工作目錄。由於在這種情況下結果沒有以基本目錄名稱為前綴,因此如果您需要真實路徑,則需要在基本目錄名稱前麵加上前綴。

匹配單個通配符或字符集的結果按二進製升序排序,除非 false 作為可選的 sort 關鍵字參數給出。 Array 的模式字符串和大括號的順序被保留。

請注意,該模式不是正則表達式,它更接近於 shell glob。有關flags 參數的含義,請參見 File::fnmatch 。區分大小寫取決於您的係統(File::FNM_CASEFOLD 被忽略)。

*

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

*

匹配所有文件

c*

匹配所有以c 開頭的文件

*c

匹配所有以 c 結尾的文件

*c*

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

請注意,這不會匹配類 Unix 隱藏文件(點文件)。為了將它們包含在匹配結果中,您必須使用 File::FNM_DOTMATCH 標誌或類似 "{*,.*}" 的標誌。

**

如果後跟 / 則遞歸匹配目錄。如果此路徑段包含任何其他字符,則與通常的 * 相同。

?

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

[set]

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

{p,q}

匹配文字 p 或文字 q 。相當於正則表達式中的模式交替。

匹配文字的長度可能超過一個字符。可以指定兩個以上的文字。

\

轉義下一個元字符。

請注意,這意味著您不能在 windows 上使用反斜杠作為 glob 的一部分,即 Dir["c:\foo*"] 不起作用,請改用 Dir["c:/foo*"]

例子:

Dir["config.?"]                     #=> ["config.h"]
Dir.glob("config.?")                #=> ["config.h"]
Dir.glob("*.[a-z][a-z]")            #=> ["main.rb"]
Dir.glob("*.[^r]*")                 #=> ["config.h"]
Dir.glob("*.{rb,h}")                #=> ["main.rb", "config.h"]
Dir.glob("*")                       #=> ["config.h", "main.rb"]
Dir.glob("*", File::FNM_DOTMATCH)   #=> [".", "config.h", "main.rb"]
Dir.glob(["*.rb", "*.h"])           #=> ["main.rb", "config.h"]

Dir.glob("**/*.rb")                 #=> ["main.rb",
                                    #    "lib/song.rb",
                                    #    "lib/song/karaoke.rb"]

Dir.glob("**/*.rb", base: "lib")    #=> ["song.rb",
                                    #    "song/karaoke.rb"]

Dir.glob("**/lib")                  #=> ["lib"]

Dir.glob("**/lib/**/*.rb")          #=> ["lib/song.rb",
                                    #    "lib/song/karaoke.rb"]

Dir.glob("**/lib/*.rb")             #=> ["lib/song.rb"]

相關用法


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