たまにメールアドレスの形式を正規表現で表すのは不可能とかというのを目にするのですが、そんなことはありません。入れ子がなければたいていの文字列の形式は正規表現で表すことができます。 ということで、RFC5321, 5322 からメールアドレスの正規表現を書いてみました。 /\A([0-9a-z!\#$%&'*+\-\/=?^_`{|}~]+(\.[0-9a-z!\#$%&'*+\-\/=?^_`{|}~]+)*|\"([\x20\x21\x23-\x5b\x5d-\x7e]|\\[\x20-\x7e])*\")@[0-9a-z]([0-9a-z-]*[0-9a-z])?(\.[0-9a-z]([0-9a-z-]*[0-9a-z])?)*\z/i ちょっと長いですけど、最近の Ruby だと (?<hoge>) と \g<hoge> を使うことで、同じ正規表現の繰り返しを簡単に書くことができる
![メールアドレスの正規表現 - tmtms のメモ](https://cdn-ak-scissors.b.st-hatena.com/image/square/3cd9c135f540135212a75898dbf539ae1478f023/height=288;version=1;width=512/https%3A%2F%2Fd1q9av5b648rmv.cloudfront.net%2Fv3%2F323x323%2Ft-shirt%2Fs%2Fburgundy%2F89233%2F1410192566-2400x2407.png.jpg%3Fh%3D2a53d19acc86252beeb748a5868214b5562bf595)