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")


Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow