fetus Diary
twitter: @fetus_hina / Twilog
ポプともID: 4174-5004-0070 (チャレ/最高38/安定34)
IIDX ID: 3604-3873 (SP六段底辺)
2006/04/07(金) - ケータイメールアドレスにマッチする正規表現
(?:(?:(?:(?:(?:(?:\.|(?:[0-9A-Za-z]|[\x21\x23\x27\x2A\x2D\x2F\x3D\x3F\x5E-\x60\x
7B-\x7E]))+))|(?:"(?:(?:[\x01-\x08\x0B\x0C\x0E-\x1F\x7F]|[\x21\x23-\x5B\x5D-\x7E
])|(?:\\[\x01-\x09\x0B\x0C\x0E-\x7F]))*"))@(?:docomo\.ne\.jp))|(?:(?:(?:(?:(?:\.
|(?:[0-9A-Za-z]|[\x21\x23\x27\x2A\x2D\x2F\x3D\x3F\x5E-\x60\x7B-\x7E]))*(?:[0-9A-
Za-z]|[\x21\x23\x27\x2A\x2D\x2F\x3D\x3F\x5E-\x60\x7B-\x7E])))|(?:"(?:(?:[\x01-\x
08\x0B\x0C\x0E-\x1F\x7F]|[\x21\x23-\x5B\x5D-\x7E])|(?:\\[\x01-\x09\x0B\x0C\x0E-\
x7F]))*"))@(?:[cdhknqrst]\.vodafone\.ne\.jp))|(?:(?:(?:(?:(?:[0-9A-Za-z]|[\x21\x
23\x27\x2A\x2D\x2F\x3D\x3F\x5E-\x60\x7B-\x7E])+(?:\.(?:[0-9A-Za-z]|[\x21\x23\x27
\x2A\x2D\x2F\x3D\x3F\x5E-\x60\x7B-\x7E])+)*))|(?:"(?:(?:[\x01-\x08\x0B\x0C\x0E-\
x1F\x7F]|[\x21\x23-\x5B\x5D-\x7E])|(?:\\[\x01-\x09\x0B\x0C\x0E-\x7F]))*"))@(?:ez
web\.ne\.jp)))
これでマシになったかな?CFWS とか明らかに不要っぽいので削ってみた。どうせコメントを正規表現で正しく表すことなんて出来ない(コメントはネストが可能)し。Perl の実験的実装なら一応出来なくはないけど…。
生成するソースはこれ
my $DQUOTE = q{"};my $NO_WS_CTL = q{[\x01-\x08\x0B\x0C\x0E-\x1F\x7F]};my $text = q{[\x01-\x09\x0B\x0C\x0E-\x7F]};my $ALPHADIGIT = q{[0-9A-Za-z]};my $esc = qq{\\\\};my $atext = qq{(?:${ALPHADIGIT}|[\\x21\\x23\\x27\\x2A\\x2D\\x2F\\x3D\\x3F\\x5E-\\x60\\x7B-\\x7E])};my $dot_atom_text_docomo = qq{(?:(?:\\.|${atext})+)};my $dot_atom_text_voda = qq{(?:(?:\\.|${atext})*${atext})};my $dot_atom_text = qq{(?:${atext}+(?:\\.${atext}+)*)};my $dot_atom = qq{(?:${dot_atom_text})};my $dot_atom_docomo = qq{(?:${dot_atom_text_docomo})};my $dot_atom_voda = qq{(?:${dot_atom_text_voda})};my $quoted_pair = qq{(?:${esc}${text})};my $qtext = qq{(?:${NO_WS_CTL}|[\\x21\\x23-\\x5B\\x5D-\\x7E])};my $qcontent = qq{(?:${qtext}|${quoted_pair})};my $quoted_string = qq{(?:${DQUOTE}${qcontent}*${DQUOTE})};my $docomo_local_part = qq{(?:${dot_atom_docomo}|${quoted_string})};my $vodafone_local_part = qq{(?:${dot_atom_voda}|${quoted_string})};my $au_local_part = qq{(?:${dot_atom}|${quoted_string})};my $docomo_domain = q{(?:docomo\.ne\.jp)};my $au_domain = q{(?:ezweb\.ne\.jp)};my $vodafone_sub_domain = q{[cdhknqrst]};my $vodafone_domain = qq{(?:${vodafone_sub_domain}\\.vodafone\\.ne\\.jp)};my $docomo_spec = qq{(?:${docomo_local_part}\@${docomo_domain})};my $vodafone_spec = qq{(?:${vodafone_local_part}\@${vodafone_domain})};my $au_spec = qq{(?:${au_local_part}\@${au_domain})};my $addr_spec = qq{(?:${docomo_spec}|${vodafone_spec}|${au_spec})};
RFC (RFC2822) を読み間違えていない限りはあっているハズ
コメント
コメントはありません。