26.1.1. 正規表現とは何か?
みなさんは日頃から色々なキーワードを色々な文章の中から検索していると思います。その中で、たまに「この単語だけじゃなくて、こっちの単語も一緒に検索したいなあ」と感じることはありませんか?
一つ例を挙げると「表記の揺れ」の問題があります。たとえば「サーバ」は「サーバー」とも表記されますので、「サーバ」という単語を検索したい人は「サーバー」という単語も同時に検索したいと思うはずです。この場合は「サーバ」で検索すれば「サーバー」のほうもヒットするので、大して問題ありません。しかし、英語の文章中から「色」という単語のある場所を調べたいと思ったらどうなるでしょうか?色は “color” とも “colour” とも表記されますが、“color” で検索しても “colour” はヒットしませんし、逆に “colour” で検索しても “color” はヒットしません。なので普通に検索しようとすれば二度手間になってしまいます。
こういう二度手間に迫られる場面はもっと身近にもあります。英単語の中には単数と複数で不規則な変化をするものがいくらでもあります。たとえば “index” の複数形は “indices” です。テキストの中から “index” の場所を調べたいと思う人は、きっと “indices” も同時に検索したいと思うはずです。英語以外の言語にも目を向ければ、もっと複雑な変化をする単語が無数に見つかります。
他にも「ある文書の中から URL を一斉に検索したい」とか「メールアドレスを全部抽出したい」とか、単に一つの文字列ではなく、特定の条件に当てはまる文字列を一斉に検索したくなる場面はいくらでもあります。このような場面で威力を発揮するのが正規表現です。正規表現とは、色々な記号を用いて複数の文字列を一度に表現する記法です。最近のテキストエディタでは正規表現を用いた検索と置換をすることができます。正規表現の文法には細かいものもありますが、主要な使い方をいくつか覚えておくだけでも作業の効率が大幅に UP するはずです。
さっそく上に書いた “color” と “colour” の問題の答えを紹介しておきましょう。正規表現ではクエスチョンマーク ‘?’ が「直前にある文字が 0 個または 1 個」という意味を表します。ですので “colou?r” と書くと ‘?’ の直前の u が 0 個または 1 個という意味になります。u が 0 個の場合が “color”、u が 1 個の場合が “colour” なので、“colou?r” で検索するだけで “color” と “colour” の両方を一斉に検索することができます。
これ以外にも正規表現の文法はたくさんあります。次節ではもっと詳しく正規表現の文法を見ていきましょう。