Julia Language
Regeksy
Szukaj…
Składnia
- Regex („[regex]”)
- r „[regex]”
- mecz (igła, stóg siana)
- matchall (igła, stóg siana)
- eachmatch (igła, stóg siana)
- ismatch (igła, stóg siana)
Parametry
Parametr | Detale |
---|---|
needle | Regex należy szukać w haystack |
haystack | tekst, w którym szukać needle |
Literały Regex
Julia obsługuje wyrażenia regularne 1 . Biblioteka PCRE jest używana jako implementacja wyrażenia regularnego. Regeksy są jak mini-język w danym języku. Ponieważ większość języków i wiele edytorów tekstu zapewnia obsługę wyrażeń regularnych, dokumentacja i przykłady ogólnego używania wyrażeń regularnych są poza zakresem tego przykładu.
Możliwe jest zbudowanie Regex
z łańcucha przy użyciu konstruktora:
julia> Regex("(cat|dog)s?")
Ale dla wygody i łatwiejszej zmiany @r_str
można zamiast tego użyć makra @r_str
:
julia> r"(cat|dog)s?"
1 : Z technicznego punktu widzenia Julia obsługuje wyrażenia regularne , które różnią się od tych wyrażeń regularnych w teorii języka i mają większą moc. Często termin „wyrażenie regularne” będzie używany również w odniesieniu do wyrażeń regularnych.
Znajdowanie dopasowań
Istnieją cztery podstawowe przydatne funkcje dla wyrażeń regularnych, z których wszystkie przyjmują argumenty w kolejności needle, haystack
. Terminologia „igła” i „stóg siana” pochodzą z angielskiego idiomu „znajdowanie igły w stogu siana”. W kontekście wyrażeń regularnych wyrażeniem regularnym jest igła, a tekst jest stogiem siana.
Za pomocą funkcji match
można znaleźć pierwsze dopasowanie w ciągu:
julia> match(r"(cat|dog)s?", "my cats are dogs")
RegexMatch("cats", 1="cat")
Za matchall
funkcji matchall
można znaleźć wszystkie dopasowania wyrażenia regularnego w ciągu:
julia> matchall(r"(cat|dog)s?", "The cat jumped over the dogs.")
2-element Array{SubString{String},1}:
"cat"
"dogs"
Funkcja ismatch
zwraca wartość logiczną wskazującą, czy znaleziono dopasowanie w ciągu:
julia> ismatch(r"(cat|dog)s?", "My pigs")
false
julia> ismatch(r"(cat|dog)s?", "My cats")
true
W eachmatch
funkcja zwraca iterację na RegexMatch
obiektów, odpowiednie do zastosowania for
pętlach :
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
Przechwytuj grupy
RegexMatch
przechwycone przez grupy przechwytywania są dostępne z obiektów RegexMatch
za pomocą notacji indeksującej.
Na przykład następujące wyrażenie regularne analizuje numery telefonów w Ameryce Północnej zapisane w formacie (555)-555-5555
:
julia> phone = r"\((\d{3})\)-(\d{3})-(\d{4})"
i załóżmy, że chcemy wyodrębnić numery telefonów z tekstu:
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"
Za pomocą funkcji matchall
możemy uzyskać tablicę dopasowanych podciągów:
julia> matchall(phone, text)
2-element Array{SubString{String},1}:
"(555)-505-1000"
"(555)-999-9999"
Przypuśćmy jednak, że chcemy uzyskać dostęp do numerów kierunkowych (pierwsze trzy cyfry ujęte w nawiasy). Następnie możemy użyć iteratora 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
Zauważ, że używamy m[1]
ponieważ numer kierunkowy jest pierwszą grupą przechwytywania w naszym wyrażeniu regularnym. Możemy uzyskać wszystkie trzy elementy numeru telefonu jako krotkę za pomocą funkcji:
julia> splitmatch(m) = m[1], m[2], m[3]
splitmatch (generic function with 1 method)
Następnie możemy zastosować taką funkcję do konkretnego RegexMatch
:
julia> splitmatch(match(phone, text))
("555","505","1000")
Lub możemy map
go dla każdego meczu:
julia> map(splitmatch, eachmatch(phone, text))
2-element Array{Tuple{SubString{String},SubString{String},SubString{String}},1}:
("555","505","1000")
("555","999","9999")