[英]Address in mailbox given [] does not comply with RFC 2822, 3.6.2. when email is in a variable
[英]Parsing an email address (FROM or TO) with name - not necessarily rfc 2822 compliant
我有一個電子郵件字段,可能以幾種不同的方式進行格式化。
hello@world.com
"hello world" <hello@world.com>
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.