2015-07-14 19 views
5

Próbuję wyodrębnić From:address z treści wiadomości e-mail. Oto co mam do tej pory:Jak wyświetlić pierwsze wystąpienie preg_match w ciągu

$string = "From: [email protected] This is just a test.. the original message was sent From: [email protected]"; 

$regExp = "/(From:)(.*)/"; 
$outputArray = array(); 
if (preg_match($regExp, $string, $outputArray)) { 
print "$outputArray[2]"; 
} 

chciałbym uzyskać adres e-mail pierwszego wystąpienia From: .. jakieś sugestie?

Odpowiedz

4

Twój regex jest zbyt chciwy: .* dopasowuje dowolne 0 lub więcej znaków innych niż znak nowej linii, tak wiele jak to możliwe. Ponadto, nie ma sensu używanie przechwytywania grup wokół wartości literalnych, powoduje to niepotrzebne obciążenie.

Użyj następującego wyrażenia regularnego:

^From:\s*(\S+) 

^ pilnuje zacząć poszukiwania od początku napisu, From: dopasowuje sekwencję znaków dosłownie \s* mecze opcjonalne obowiązuje, (\S+) rejestruje 1 lub więcej niż symbole białych znaków.

Zobacz sample code:

<?php 
$string = "From: [email protected] This is just a test.. the original message was sent From: [email protected]"; 

$regExp = "/^From:\s*(\S+)/"; 
$outputArray = array(); 
if (preg_match($regExp, $string, $outputArray)) { 
print_r($outputArray[1]); 
} 

Wartość szukasz jest wewnątrz $outputArray[1].

+0

niesamowite !, dzięki alot bracie. bardzo doceniane – samjones39

Powiązane problemy