正規表現って構文が色々あって、読むごとに学びがありますよね。 今回は “?:” っていう構文について調べたので、備忘録がてらメモっときます
(写真は昨日の夜に行った 七志 とんこつ編 渋谷道玄坂店 です)
正規表現 “?:” の意味
MSDNによると、
(?:pattern) pattern と一致しても、その文字列は記憶されず、後で使用することはできません。"or" を意味する (|) を使用してパターンの一部を結合するときに便利です。たとえば、'industry|industries' と指定する代わりに、'industr(?:y|ies)‘ と指定する方が簡単です。
https://msdn.microsoft.com/ja-jp/library/cc392020.aspx
とのこと
要は、「 ()
のようにマッチングには使えるが、マッチした文字列の情報を保持しないよ」っていう表現ですね
“?:” は、どういう時に使うのか?
- メモリを節約したいとき
- この部分は要らない、っていうのを読んだ人に伝えたいとき
たとえば
Gmailメールアドレスから、エイリアスの部分を除く文字列を取得したいとき、何も考えないと下記のような表現になると思います
([a-zA-Z0-9-\.]+)(\+[a-zA-Z0-9-\.]+)?@gmail\.com
↑に対して example+aaa@gmail.com
っていう文字列を与えると、example
と +aaa
の2つがマッチング結果になります。
欲しかったのは example
だけなので +aaa
は余計です。
こういう時に “?:” を使って下記のように書くと example
だけを求められます。
([a-zA-Z0-9-\.]+)(?:\+[a-zA-Z0-9-\.]+)?@gmail\.com