Julia Language
regexes
Sök…
Syntax
- Regex ( "[regex]")
- r "[reguljärt uttryck]"
- tändsticka (nål, höstack)
- tändstång (nål, höstack)
- eachmatch (nål, höstack)
- ismatch (nål, höstack)
parametrar
Parameter | detaljer |
---|---|
needle | Regex att leta efter i haystack |
haystack | texten för att leta efter needle |
Regex-bokstäver
Julia stöder regelbundna uttryck 1 . PCRE-biblioteket används som regex-implementering. Regexer är som ett minispråk inom ett språk. Eftersom de flesta språk och många textredigerare ger lite stöd för regex, ligger dokumentation och exempel på hur man använder regex i allmänhet utanför detta exempel.
Det är möjligt att konstruera en Regex
från en sträng med konstruktorn:
julia> Regex("(cat|dog)s?")
Men för enkelhetens skull och enklare Escaping den @r_str
sträng makro kan användas i stället:
julia> r"(cat|dog)s?"
1 : Tekniskt stöder Julia regexer, som skiljer sig från och är mer kraftfulla än vad som kallas reguljära uttryck i språkteorin. Ofta kommer termen "regelbundet uttryck" att användas för att hänvisa till regexer också.
Hitta matcher
Det finns fyra primära användbara funktioner för reguljära uttryck, som alla tar argument i needle, haystack
. Terminologin "nål" och "höstack" kommer från det engelska formspråket "att hitta en nål i en höstack". I samband med regexer är regex nålen och texten är höstacken.
Den match
Funktionen kan användas för att hitta den första matchen i en sträng:
julia> match(r"(cat|dog)s?", "my cats are dogs")
RegexMatch("cats", 1="cat")
matchall
kan användas för att hitta alla matchningar i ett reguljärt uttryck i en sträng:
julia> matchall(r"(cat|dog)s?", "The cat jumped over the dogs.")
2-element Array{SubString{String},1}:
"cat"
"dogs"
Funktionen ismatch
returnerar en boolean som indikerar om en matchning hittades inuti strängen:
julia> ismatch(r"(cat|dog)s?", "My pigs")
false
julia> ismatch(r"(cat|dog)s?", "My cats")
true
Funktionen eachmatch
returnerar en iterator över RegexMatch
objekt, lämpliga att använda med for
slingor :
julia> for m in eachmatch(r"(cat|dog)s?", "My cats and my dog")
println("Matched $(m.match) at index $(m.offset)")
end
Matched cats at index 4
Matched dog at index 16
Fånga grupper
De underlag som fångats av infångningsgrupper är tillgängliga från RegexMatch
objekt med indexeringsnotation.
Följande regex analyserar till exempel nordamerikanska telefonnummer skrivna i (555)-555-5555
format:
julia> phone = r"\((\d{3})\)-(\d{3})-(\d{4})"
och antar att vi vill extrahera telefonnummer från en text:
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"
Med hjälp av matchall
funktionen kan vi få en rad underlag som matchas själva:
julia> matchall(phone, text)
2-element Array{SubString{String},1}:
"(555)-505-1000"
"(555)-999-9999"
Men anta att vi vill komma åt områdeskoderna (de tre första siffrorna, medföljda inom parentes). Då kan vi använda 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
Observera här att vi använder m[1]
eftersom områdekoden är den första fångstgruppen i vårt vanliga uttryck. Vi kan få alla tre komponenterna i telefonnumret som en tupel med en funktion:
julia> splitmatch(m) = m[1], m[2], m[3]
splitmatch (generic function with 1 method)
Då kan vi tillämpa en sådan funktion på en viss RegexMatch
:
julia> splitmatch(match(phone, text))
("555","505","1000")
Eller så kan vi map
det över varje match:
julia> map(splitmatch, eachmatch(phone, text))
2-element Array{Tuple{SubString{String},SubString{String},SubString{String}},1}:
("555","505","1000")
("555","999","9999")