メールアドレスの表記法

以前、「メールアドレス」として入力された文字列から「実際のメールアドレス」を取り出すための関数を書いたのだが、実はそれが間違っていたことが発覚。
以前つくったものは「実名付きのアドレスでは必ず<と>で囲まれた部分が一つだけある」「<や>はバックスラッシュでエスケープ可能」ということでつくっていたが、よく考えると「ダブルクォーテーションで囲まれた中では<や>も書ける」「ダブルクォーテーションもやっぱりエスケープ可能」と言う事実を忘れていた。
・・・前に書いたものでも既にかなりややこしいのに、これ以上ややこしくなるのか。エスケープ処理がなければかなり簡単なのだが。
単純な関数をつくる方針を変えて、「指定文字で囲まれた部分の始まりと終わりを返す関数」とかをつくって、「ダブルクォーテーション部分を検出、削除」「<>の間を検出、なかみを取り出す」「中身の妥当性を確認」という感じにするべきなのだろう。
・・・やっぱりめんどくさい。どこかに標準的手法は落ちていないものか。
と思ってPEARを調べ直すと・・・この辺なのか?
http://pear.php.net/manual/ja/package.mail.mail-rfc822.parseaddresslist.php
思い返すに、PEARでは「日本語のメールが送れなさそう」なので使うのをやめたような気がするのだが、アドレス抽出処理ぐらいは大丈夫だろうか。ソースがみれるし、少なくとも他の人がどうしたのかは分かるし、2バイトが通りそうかもだいたい分かるだろう。
(結果)以外とややこしい実装をしていそう(何しろ、再帰呼び出しをしているかどうかを示すフラグがメンバ変数に存在する)ので、精査するのは後回しに。どのみち「他人に指摘されたのではなく、自分で気がついただけ」「本来そのデータ項目には単純なメールアドレスが入っている予定で、抽出処理を書いたのは念のため」と言うことで、他の作業を先にすることにした。「PEARのコード規約ではファイル末尾の"?>"は書かない」というのを確認した。