2

次の文字列のメールアドレス部分を解析する必要があります。

"mr. bunny" <bob@bunny.com>
<bob@bunny.com>
"bob is a bunny" <bob@bunny.com>
bob@bunny.com
"123 go bob go!" <bob@bunny.com>

すべての場合において、Imは文字列「bob@bunny.com」を探しており、残りは無視できます。

/ "[^"]? "?\ s?<?([\ w @。]?)>?/のさまざまな組み合わせを試しましたが、魔法のパターンを見つけることは私を逃れています。

提案?

FWIWこれはPerlで実行されます。

4

2 に答える 2

0

RFC 2822に準拠するものが必要な場合は、これを正規表現構文に変換することをお勧めします。

(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])*")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\])

http://www.regular-expressions.info/email.htmlから、他のより小さな式があります。

于 2012-05-11T21:06:06.850 に答える
0

単純な正規表現で十分な場合は、次を使用できます。

([a-zA-Z0-9 ._%-] + @ [a-zA-Z0-9 .-]+。[a-zA-Z]{2,4})

@Peterが述べたように、RFC 2822に準拠する場合は、はるかに複雑になります。ただし、RFCは、サポートされていない廃止された二重引用符と角かっこの使用法を指定しているため、実際には完全には準拠したくない場合があります。一部の電子メールアプリケーションによって。より実用的ですが、それでもかなり堅牢な例は、次のようなものです。

[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?
于 2012-05-11T21:12:26.333 に答える