Julia Language
正規表現
サーチ…
構文
- 正規表現( "[正規表現]")
- r "[正規表現]"
- マッチ(針、干し草)
- マッチオール(針、干し草)
- 各マッチ(針、干し草)
- ismatch(針、干し草)
パラメーター
パラメータ | 詳細 |
---|---|
needle | Regex 中を探すためにhaystack |
haystack | needle を探すテキスト |
正規表現リテラル
Juliaは正規表現をサポートしています1 。 PCREライブラリは、正規表現の実装として使用されます。正規表現は、言語内のミニ言語に似ています。ほとんどの言語と多くのテキストエディタは、正規表現のためのいくつかのサポートを提供しているので、ドキュメント、および使用方法の例正規表現を一般的には、この例の範囲外です。
コンストラクタを使って文字列からRegex
を構築することは可能です:
julia> Regex("(cat|dog)s?")
しかし、便利で簡単にエスケープするために、 @r_str
文字列マクロを代わりに使用することができます:
julia> r"(cat|dog)s?"
1 :技術的に、Juliaは正規表現をサポートしています。 正規表現は、言語理論の正規表現とは異なり、より強力です。しばしば、正規表現を指すために「正規表現」という用語が使用されます。
マッチの検索
正規表現には4つの主要な有用な関数があり、そのすべてがneedle, haystack
順番で引数をとります。 「針」と「干し草」という用語は、英語のイディオム「乾草の針を見つける」から来ています。正規表現の文脈では、正規表現は針であり、テキストは干し草です。
match
関数は、文字列中の最初の一致を見つけるのに使うことができます:
julia> match(r"(cat|dog)s?", "my cats are dogs")
RegexMatch("cats", 1="cat")
matchall
関数を使用して、文字列内の正規表現のすべての一致を見つけることができます。
julia> matchall(r"(cat|dog)s?", "The cat jumped over the dogs.")
2-element Array{SubString{String},1}:
"cat"
"dogs"
ismatch
関数は、文字列内で一致するものが見つかったかどうかを示すブール値を返します。
julia> ismatch(r"(cat|dog)s?", "My pigs")
false
julia> ismatch(r"(cat|dog)s?", "My cats")
true
eachmatch
関数はfor
ループでの使用に適したRegexMatch
オブジェクトのイテレータを返します 。
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
キャプチャグループ
キャプチャグループによって取得された部分文字列は、インデックス表記法を使用して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"
しかし、エリアコード(括弧内の最初の3桁)にアクセスしたいとします。次に、 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]
を使用することに注意してください。関数を使用して、電話番号の3つのコンポーネントすべてをタプルとして取得できます。
julia> splitmatch(m) = m[1], m[2], m[3]
splitmatch (generic function with 1 method)
次に、そのような関数を特定のRegexMatch
適用することができます:
julia> splitmatch(match(phone, text))
("555","505","1000")
あるいは、それぞれの試合にmap
こともできmap
:
julia> map(splitmatch, eachmatch(phone, text))
2-element Array{Tuple{SubString{String},SubString{String},SubString{String}},1}:
("555","505","1000")
("555","999","9999")