簡體   English   中英

解析具有名稱的電子郵件地址(FROM或TO)-不一定符合RFC 2822

[英]Parsing an email address (FROM or TO) with name - not necessarily rfc 2822 compliant

我有一個電子郵件字段,可能以幾種不同的方式進行格式化。

  1. hello@world.com

  2. "hello world" <hello@world.com>

  3. hello world <hello@world.com>

我想同時捕獲hello world字符串(如果存在) 電子郵件地址(如果存在)。 我有一個幾乎可以使用的正則表達式,但是效果不盡相同。

sed -r  's/"?([^"]+)*"?\s<?([^>]+@[^>]+)>?/["\1","\2"]/' <<< 'Hello World <helloworld@gmail.com>'

請幫忙?

更新:

這應該做您想要的:

^(?:"?([^@"]+)"?\s)?<?([^>]+@[^>]+)>?$

這會將第一部分(如果有的話)存儲到第一個捕獲組中,並將電子郵件地址存儲到第二個捕獲組中。

正則表達式看起來不太正確。 無論如何,在執行此正則表達式期間會發生“回溯限制已用盡”錯誤(您可以使用preg_last_error函數進行檢查),因此可以增加回溯限制以使其正常工作:

 ini_set('pcre.backtrack_limit', 1000000);
 var_dump(preg_replace('~"?([^"]+)*"?\s<?([^>]+@[^>]+)>?~', '["$1","$2"]', 'hello@world.com'));

輸出:

 string(15) "hello@world.com"

紅寶石(1.9+)

$ ruby -e 'p gets.scan(/"?([^"]+)*"?\s<?([^>]+@[^>]+)>?/)' <<< '"Hello World" <helloworld@gmail.com>'
[["Hello World", "helloworld@gmail.com"]]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM