サーチ…


構文

  • 正規表現( "[正規表現]")
  • 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")


Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow