2013-02-12 29 views
-2

我有一個應用程序,我在解析地址,並試圖實現下面的正則表達式來從地址中獲取美國郵政編碼。一旦我抓住它,我想從地址字符串中刪除郵政編碼,因爲郵政編碼干擾了電話號碼的獲取。但是,以下內容不會抓取郵政編碼。正則表達式PHP解析郵政編碼並從字符串中刪除

$string = "John Doe 1234 Main Street Peoria, IL 60601 (555) 555-5555"; 
function extract_zipcode_from($string){ 
    preg_match_all("/\b[A-Z]{2}\s+\d{5}(-\d{4})?\b/", $string, $matches); 
    return $matches[0]; 
} 
$zip = extract_zipcode_from($string); 
$zip = print_r(implode("\n", $zip),true); 
$string = str_ireplace($zip,"",$string); 

任何人都可以建議如何讓這個工作?

謝謝!

+1

爲什麼不使用'preg_replace()'將其刪除。手動搜索和str_replace是不需要的。 – mario 2013-02-12 02:53:42

+0

你的代碼中的錯誤是,你沒有將郵政編碼包裹在括號中來捕獲它們。 '(\ d {5}( - \ d {4})?)' - 一旦你明白了,看看你在match數組中有什麼。然後,磨練你的正則表達式,使用preg_replace()來代替馬里奧所暗示的。 – Jerry 2013-02-12 03:04:57

+0

you mean preg_match_all(「/ \ b [A-Z] {2} \ s +(\ d {5})( - \ d {4})?)\ b /」,$ string,$ matches); – user1904273 2013-02-12 03:15:42

回答

0

試試這個代碼,這將給你的電話和拉鍊替換任何東西。

假設Zip和手機將始終在字符串的末尾,zip後的任何內容都是電話號碼。

$string = "John Doe 1234 Main Street Peoria, IL 60601 (555) 555-5555"; 

preg_match("/(?P<zip>\d{5})(?P<phone>.*)$/",$string,$match); 

echo "Zip : ".$match['zip']; 
echo "<br>"; 
echo "Phone : ".$match['phone']; 
相關問題