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) を読み間違えていない限りはあっているハズ

コメント

コメントはありません。

名前
メール
コメント

※HTML タグは使えません。HTTP URL には自動リンクが張られます。

Captcha
画像から読み取れる文字を入力: