新刊ピックアップ

コンピュータ/インターネットの世界で遭遇する。謎の呪文(!?)正規表現って何だろう?

この記事を読むのに必要な時間:およそ 1 分

コンピュータやインターネットの世界では,普段見慣れない文字や記号の並びがあれこれ出てきて,これは一体何だろうと頭を抱えることも,しばしば。本記事では,そんな謎の代表格(!)正規表現(Regular Expression)について取り上げます。

たまに目にする謎の呪文

みなさんは,図1のような「呪文のような何か」が,インターネットの世界では役に立っていることをご存知でしょうか?

図1 謎の呪文(!?)⁠メールアドレスのパターン)

^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$

この呪文は次のような文字列に関係します。

  • gihyo01taro@docomo.ne.jp
  • ryoma@i.softbank.jp
  • book_shinkan@gihyo.co.jp

これらは,わたしたちが普段からよく使っているメールアドレスですね。

ところで,これらの「メールアドレスとして使える文字列」⁠→⁠メールアドレスのパターン」と言います)をちゃんと説明することってできるのでしょうか? たとえば,NTTドコモのメールアドレス変更のページでは次のような文章で説明しています。

初期設定では,⁠ランダムな英数字の組み合わせ@docomo.ne.jp」となっています

わかりやすい説明ですね。ただ,こういった説明は人間にはわかりやすいのですが,コンピュータに理解させるためには「工夫」が必要となります。

どのような工夫をするかと言うと,先ほどの図1で示した呪文のような文字列を使います。図1は,メールアドレスのパターンを「コンピュータが理解できる形で書かれた表現式」というわけです。

プログラミングと正規表現

プログラミングの世界では,このような式は正規表現と呼ばれていて,さまざまな場面で役に立つ便利な道具として愛されています。

何かWebサービスに会員登録をする時には「あなたのメールアドレスを教えてください」とメールアドレスを入力するフォームが用意されていることがほとんどです。そのような場面で,サービスを提供している側は「入力されたメールアドレスが本当に正しいものか?」をコンピュータにチェックさせます。

先ほどの図1の正規表現は,Webの標準的な枠組みHTML5で実際に使われているものです。コンピュータが入力をチェックして,アドレスが間違っていた場合は図2のような警告を出してくれます。図2では「メールアドレスのはずなのに@(アットマーク)が含まれいません」ということを伝えてくれています。メールアドレスの入力を期待しているのに,メールアドレスとは違う文字列が入力されると処理に困ります(それだけでは止まらない問題になる場合もあります)から,サービスに欠かせない機能です。

図2 HTML5のインプット要素によるメールアドレスのバリデーション(検証)

図2 HTML5のインプット要素によるメールアドレスのバリデーション(検証)


さて,図1のようなメールアドレスを表す正規表現について,

  • どういう規則で(あんな呪文みたいなものが)書かれているのか
  • なぜコンピュータにとって理解しやすいのか

などなど気になるところですが,これらについてお話するには記事スペースが足りなくなってきました。

少しだけ補足しておくと,正規表現はコンピュータとともに発展してきた技術の一つで,実は長い長い歴史がある分野です。かと言って難しいことばかりではなく,記号/構文の簡単な使い方を覚えるだけでも,文字列にまつわるさまざまな問題に応用できます。プログラミングでなくても,普段のちょっとしたテキストファイルの編集でも効果抜群。気軽に,正規表現のメタ文字である「*」「|」など1つ2つからでもパズル感覚で始めると楽しめるかもしれません。そして,もしさらなる興味が湧いたなら...... 歴史をはじめその深い深い話に触れてみるのはいかがでしょうか。

(本文:新屋良磨,⁠正規表現技術入門』⁠技術評論社,2015)著者)