Как запустить это регулярное выражение на PHP, которое анализирует полный адрес электронной почты с именем?

У меня есть это регулярное выражение:

^((?>[a-zA-Z\d!#$%&'*+\-/=?^_`{|}~]+\x20*|"((?=[\x01-\x7f])[^"\\]|\\[\x01-\x7f])*"\x20*)*(?<angle><))?((?!\.)(?>\.?[a-zA-Z\d!#$%&'*+\-/=?^_`{|}~]+)+|"((?=[\x01-\x7f])[^"\\]|\\[\x01-\x7f])*")@(((?!-)[a-zA-Z\d\-]+(?<!-)\.)+[a-zA-Z]{2,}|\[(((?(?<!\[)\.)(25[0-5]|2[0-4]\d|[01]?\d?\d)){4}|[a-zA-Z\d\-]*[a-zA-Z\d]:((?=[\x01-\x7f])[^\\\[\]]|\\[\x01-\x7f])+)\])(?(angle)>)$ 

Который предположил бы разобрать полную электронную почту с именем и всем, я не мог заставить его работать на PHP, пожалуйста, помогите?

Вот что я пробовал:

 $test = "Joe Doe <doe@example.com>"; $emailRegex = '@^((?>[a-zA-Z\d!#$%&\'*+\-/=?^_`{|}~]+\x20*|"((?=[\x01-\x7f])[^"\\]|\\[\x01-\x7f])*"\x20*)*(?<angle><))?((?!\.)(?>\.?[a-zA-Z\d!#$%&\'*+\-/=?^_`{|}~]+)+|"((?=[\x01-\x7f])[^"\\]|\\[\x01-\x7f])*")@(((?!-)[a-zA-Z\d\-]+(?<!-)\.)+[a-zA-Z]{2,}|\[(((?(?<!\[)\.)(25[0-5]|2[0-4]\d|[01]?\d?\d)){4}|[a-zA-Z\d\-]*[a-zA-Z\d]:((?=[\x01-\x7f])[^\\\[\]]|\\[\x01-\x7f])+)\])(?(angle)>)$@'; preg_match($emailRegex, $test, $curResult); print_r($curResult); 

Related of "Как запустить это регулярное выражение на PHP, которое анализирует полный адрес электронной почты с именем?"

Будь проще. Поскольку мы знаем, что мы можем использовать это, чтобы упростить почти любой адрес электронной почты :

 (^[^ ]+@[^ ]+\.[^ ].+$) 

Еще один шаг позволит нам получить имя тоже:

 ^(.*?) *(<[^ ]+@[^ ]+\.[^ ].+>)$ 

http://regex101.com/r/wT6uX8

В PHP вам не нужно такое регулярное выражение монстра, вы можете просто использовать встроенный валидатор: http://www.php.net/manual/en/filter.examples.validation.php

Например, будет выполнено только первое echo :

 <?php $email_a = 'joe@example.com'; $email_b = 'bogus'; if (filter_var($email_a, FILTER_VALIDATE_EMAIL)) { echo "This ($email_a) email address is considered valid."; } if (filter_var($email_b, FILTER_VALIDATE_EMAIL)) { echo "This ($email_b) email address is considered valid."; } ?> 

Пытаться,

$ emailRegex = "/([\w\s]+)\<(\w+([-+.']\w+) @ \ w + ([-.] \ w +) . \ w + ([-.] \ w + )*)/я";

Я надеюсь, что это поможет вам

Я бы не написал пользовательскую функцию, если PHP- imap_rfc822_parse_adrlist делает именно то , что вам нужно.