2015-07-14 17 views
5

Tôi đang cố trích xuất From:address từ nội dung email. Dưới đây là những gì tôi có cho đến thời điểm này:Làm thế nào để preg_match lần xuất hiện đầu tiên trong một chuỗi

$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]"; 
} 

Tôi muốn nhận địa chỉ email của lần xuất hiện đầu tiên là From: .. bất kỳ đề xuất nào?

Trả lời

4

Regex của bạn quá tham lam: .* khớp với bất kỳ 0 hoặc nhiều ký tự khác với dòng mới, càng nhiều càng tốt. Ngoài ra, không có điểm trong việc sử dụng các nhóm chụp xung quanh các giá trị chữ, nó tạo ra một chi phí không cần thiết.

Sử dụng biểu thức chính quy sau:

^From:\s*(\S+) 

Các ^ đảm bảo chúng tôi bắt đầu tìm kiếm từ đầu của chuỗi, From: phù hợp với chuỗi các ký tự không gian theo nghĩa đen, \s* trận đấu không bắt buộc, (\S+) chụp 1 hoặc không hơn ký hiệu khoảng trắng.

Xem 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]); 
} 

Giá trị bạn đang tìm kiếm là bên trong $outputArray[1].

+0

tuyệt vời !, cảm ơn rất nhiều bro. Nhiều đánh giá cao – samjones39

Các vấn đề liên quan