皆さま、こんにちは。ホンヤク社の成田です。
梅雨に入りましたが、東京はそれほど雨がなく暑い日が続いています。皆さまはいかがお過ごしでしょうか。
今回も、前回に続いてキャプチャについてお話ししますが、キャプチャをしない表現についてご紹介したいと思います。ですが、「キャプチャをしない」とはどのような意味なのかを先に説明したほうが良いかと思います。
以前にもお話ししたように、「( )」は、「( | )」とすることでキャプチャとは別に「指定文字列のいずれか1つ」を表す正規表現でもあります。たとえば「(color|colour)」とすると「color」か「colour」のいずれかを表します。
キャプチャの例として「(.+)[府県]の\1市は、\1[府県]の県庁所在地である。」という「大阪府の大阪市は、大阪府の県庁所在地である。」などがヒットするものを以前にご紹介しましたが、これを、
(.+)(府|県)の\1市は、\1(府|県)の県庁所在地である。
のように書くことも可能です。ただし、「(府|県)」の部分は、キャプチャの対象としてではなく、「府」か「県」のどちらか、という意味で「( )」を使用しているため、キャプチャの対象からは外したほうが混乱を防げます。このようなときに、「(?:)」と記すことで「( )」を使用してもキャプチャの対象とはしない、とすることが可能になります。したがって、
(.+)(?:府|県)の\1市は、\1(?:府|県)の県庁所在地である。
とすれば、「府|県」の部分はキャプチャ対象外となります。
いかがでしたでしょうか? 特に、キャプチャの対象としたいものが複数ある場合には「\1」「\2」「\3」などをキャプチャした順に応じて使い分けなければなりませんが、その際にキャプチャする必要のないものまでカウントするのは非効率かと思いますので、しないものにはあらかじめ「?:」をつけて扱いを別にしておくと良いかと思います。
次回は、先読みについてお話しいたします。
