捕獲組

可以使用索引表示法從 RegexMatch 物件訪問捕獲組捕獲的子字串。

例如,以下正規表示式解析以 (555)-555-5555 格式編寫的北美電話號碼:

julia> phone = r"\((\d{3})\)-(\d{3})-(\d{4})"

並假設我們希望從文字中提取電話號碼:

julia> text = """
       My phone number is (555)-505-1000.
       Her phone number is (555)-999-9999.
       """
"My phone number is (555)-505-1000.\nHer phone number is (555)-999-9999.\n"

使用 matchall 函式,我們可以得到一個匹配自己的子字串陣列:

julia> matchall(phone, text)
2-element Array{SubString{String},1}:
 "(555)-505-1000"
 "(555)-999-9999"

但是假設我們想要訪問區號(前三位數,括在括號中)。然後我們可以使用 eachmatch 迭代器:

julia> for m in eachmatch(phone, text)
           println("Matched $(m.match) with area code $(m[1])")
       end
Matched (555)-505-1000 with area code 555
Matched (555)-999-9999 with area code 555

請注意,我們使用 m[1],因為區號是我們正規表示式中的第一個捕獲組。我們可以使用函式將電話號碼的所有三個組成部分作為元組:

julia> splitmatch(m) = m[1], m[2], m[3]
splitmatch (generic function with 1 method)

然後我們可以將這樣的函式應用於特定的 RegexMatch

julia> splitmatch(match(phone, text))
("555","505","1000")

或者我們可以在每個匹配中發現它:

julia> map(splitmatch, eachmatch(phone, text))
2-element Array{Tuple{SubString{String},SubString{String},SubString{String}},1}:
 ("555","505","1000")
 ("555","999","9999")