正規表現 応用編その5 キャプチャ②

原文ファイルのトリセツ

皆さま、こんにちは。ホンヤク社の成田です。
本格的に半袖の時期に入ったような1週間でした。皆さまいかがお過ごしでしょうか。

 

今回は、キャプチャについて引き続きお話しします。先週ご紹介した例に加えて、さらに別のキャプチャ使用例を挙げていきたいと思います。

 

<例>
\d\d\d\d([/\- ])\d\d\1\d\d
⇒ 「1972/02/20」「2018-12-31」のように「数字4桁」「数字2桁」の間にスラッシュ、ハイフン、半角スペースのいずれかが入り、かつ「数字2桁」とさらにその後ろの「数字2桁」との間に同じものが入るものだけがヒットするようにキャプチャを使用しています。

 

\d{0,3}([, ]?)(\d{3}\1)*\d{1,3}
⇒ 以前に「\d{0,3},?(\d{3},?)*\d{1,3}」という、あらゆる自然数がマッチする正規表現をご紹介しましたが、その応用版です。「,?」(カンマがあるかないか)を「([, ]?)」(カンマかスペースがあるかないか)に置き換え、それをキャプチャして「\1」を使うことで、千の桁区切り記号がカンマでもスペースでも何もなくてもよく、かつ同じ記号(あるいは何もなし)がきちんと繰り返されるものがヒットするようにしています。

 

(\w).+\1
⇒ 最初の1文字をキャプチャして最後に「\1」として再利用し、間に任意の1文字以上が入るという正規表現です。これは、最初と最後の文字が同じ文字列がヒットします。

 

(\w)(\w?)(\w?)(\w?)(\w?).?\5\4\3\2\1
⇒ 上の例の応用版です。これは、いわば回文をヒットさせるための正規表現です。「ママ」「トマト」のような2~3文字の短いものから、最長で11文字までのものにヒットするようにしています。なお、この例では「.」を用いていますので、「日曜日」「馬車馬」「SaaS」「rotator」といった漢字やアルファベットのケースもヒットします。

 

いかがでしたでしょうか? キャプチャを使用してさまざまな検索ができることがおわかりいただけたら幸いです。ほかにも応用できるケースがあるかと思いますので、ぜひお試しください。

次回もキャプチャについてもう少しだけお話ししますが、キャプチャをしない例についてご紹介したいと思います。