PHP, böyle bir dizesi vardır:
$string = "user@domain.com MIME-Version: bla bla bla";
Nasıl ben sadece e-posta adresi alabilirim? Değerini elde etmek için herhangi bir kolay yolu var mı?
Mandaleeka cevabı bina, bir boşluk delimeter kullanarak dize kırmaya sonra sterilize filter_var sonra kullanmak ne kalır meşru bir e-posta adresi olup olmadığını görmek için doğrulamak:
function extract_email_address ($string) {
foreach(preg_split('/\s/', $string) as $token) {
$email = filter_var(filter_var($token, FILTER_SANITIZE_EMAIL), FILTER_VALIDATE_EMAIL);
if ($email !== false) {
$emails[] = $email;
}
}
return $emails;
}
constantine regex dayanır .. çok ip adresi etki ile çalışır.
$pattern="/(?:[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])+)\])/";
//$pattern="/[A-Za-z0-9_-]+@[A-Za-z0-9_-]+\.([A-Za-z0-9_-][A-Za-z0-9_]+)/";
$subject="Hello a@b.com francis a@b words francisfueconcillo@gmail.com words 2 words123 francis@192.168.0.1";
preg_match_all($pattern, $subject, $matches);
Rob Locken cevaplarını @ güncellenmesi:
function extract_email_address ($string) {
$emails = array();
$string = str_replace("\r\n",' ',$string);
$string = str_replace("\n",' ',$string);
foreach(preg_split('/ /', $string) as $token) {
$email = filter_var($token, FILTER_VALIDATE_EMAIL);
if ($email !== false) {
$emails[] = $email;
}
}
return $emails;
}
Pek çok olası izin verilen karakterler vardır, çünkü e-posta adresleri düzenli ifadeler kullanarak filtre gerçekten zor olan. Bu yapılabilir, ama tam olarak neye ihtiyacınız almak için bunu biraz çimdik olabilir.
Böyle bir şey ile başlamak olabilir:
$string = "user@domain.com MIME-Version: bla bla bla";
$matches = array();
$pattern = '/[A-Za-z0-9_-]+@[A-Za-z0-9_-]+\.([A-Za-z0-9_-][A-Za-z0-9_]+)/'
preg_match($pattern,$string,$matches);
Ve sonra $ karşılaşmalar e-posta adresinizi içermelidir.
E-posta adresi dize önünde her zaman varsa, bunu elde etmek için kolay yolu uzay karakterin tüm örneklerini dize bölmek, ve sonra sadece sonuç dizisinden ilk değeri almak için basitçe.
Tabii ki, bunu kullanmak önce bir e-posta adresi benzeyen şey kontrol ettiğinizden emin olun.
Ayrıntılar için PHP'nin 'bölünmüş' işlevi bakın.
Regular expressions in PHP bakabilirsiniz.
Düzenli ifadeler ile belirli bir dize herhangi bir metin deseni tespit edebilirsiniz. Onlar inanılmaz derecede faydalıdır. Yani kopyala-yapıştırma ile şimdilik başka bir yanıt bir kod parçacığını sopa olsa bile, bunu içine biraz daha kazma düşünmelisiniz.
Bu ilk başta biraz karmaşık olabilir ama kesinlikle çabaya değer.
http://www.ex-parrot.com/~pdw/Mail-RFC822-Address.html
Eğer gerçekten bir regexpi kullanmak istiyor musunuz? Sadece boşluklarla bölünmüş.
Bu benim için çalıştı
(?:[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])+)\])
bir dize herhangi bir e-posta adresi tespit