これは2005年に以前のブログへ投稿したエントリーを加筆、編集したものです。
ある文書が特定の書式に基づいているのか、フォームへの入力値が適切であるかなど、入力値がある形式に従っているかを確認するときに正規表現は便利だ。しかし、その可読性は良好であるとはいえず、確認しながらの入力では作業効率が悪い時もある。
RegExLibは正規表現のデータベース・サイトだ。登録された正規表現の中から、検索キーに関連するものを紹介してくれる。例えば「address」と検索すれば、メール・アドレスやIPアドレス、MACアドレスに合致する正規表現を紹介してくれる。
システム開発に携わっていたころ、webフォームからの入力値を確認するために、よく正規表現を利用していた。submit時にJavaScript内で正規表現を利用して入力値確認を行い、適切であればサーバーへ引き渡す、そうでなければpop-upと共に再入力を促す、と言った具合だ。
メール・アドレスの正規表現を実装するときのことを、よく覚えている。当時、情報収集のためにやり取りしたメールを確認すると、次の記述が含まれていた。
JavaScriptでは@が-!#$%&\'*+\\/0-9=?A-Z^_`a-z{|}~に含まれるんでしょうか?
言語によっては、正規表現の解釈が異なることもあるのだ。この時は、他の言語では正常にマッチングを返す表現が、なぜかJavaScriptではマッチングしないことに悩まされていたのだった。
正規表現の解釈以前に、RegExLibで紹介される正規表現をメール・アドレスのマッチングに用いる場合、あらゆるメール・アドレスにマッチングさせることはできない。それは、それぞれの事情や前提があった上での「実用」を反映したものだろう。マッチング対象となるメール・アドレスの条件から、正規表現の可読性までを考慮したトレード・オフの結果だ。
メール・アドレスにマッチさせるための正規表現を、特にRCFに準拠したアドレスにマッチさせる表現を実装するのは困難ではないものの、議論の余地がある領域だ。その正規表現は、このようになる。

メール・アドレスにマッチさせる正規表現には、実装に携わる人々の試行錯誤が求められる。特に「実用」を重視する観点から、それに対する「正解」はないだろう。「正規表現 メールアドレス RFC」で検索すると、その事情や対応が理解できるだろう。
一つの正規表現ではマッチング困難、あるいは何らかの問題がある場合、複数の異なる表現を試行錯誤することになる。担当者自身が考えた表現以外に、どのような表現が考えられるのか？RegExLibはそのような場面での一助になるだろう。