【发布时间】:2013-02-12 02:48:53
【问题描述】:
我有一个应用程序正在解析地址,并且一直在尝试实现以下正则表达式来从地址中获取美国邮政编码。一旦我抓住它,我想从地址字符串中删除邮政编码,因为邮政编码会干扰获取电话号码。但是,以下不是抓取邮编。
$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);
谁能建议如何让它工作?
谢谢!
【问题讨论】:
-
为什么不使用
preg_replace()删除它。不需要手动搜索和 str_replace。 -
代码中的错误是您没有将邮政编码包装在括号中以捕获它们。
(\d{5}(-\d{4})?)- 一旦你明白了,看看你在匹配数组中的内容。然后,在磨练了你的正则表达式之后,按照 mario 的建议使用 preg_replace() 代替。 -
你的意思是 preg_match_all("/\b[A-Z]{2}\s+(\d{5})(-\d{4})?)\b/", $string, $匹配);
-
我能够获得我在另一个网站上找到的关注。不知道为什么 pregreplace 比 str_replace 好。从我读到的 str_ireplace 非常快: $zip_pattern = "/\d{5}/"; $str = "Mission Viejo, CA 92692"; preg_match($zip_pattern,$str,$regs); $zip= $regs[0];$str = str_ireplace($zip,"",$str);