【问题标题】:regex php parse zip code and remove from string正则表达式 php 解析邮政编码并从字符串中删除
【发布时间】: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);

标签: php regex zipcode


【解决方案1】:

试试这个代码,它会给你电话和拉链,而无需替换任何东西。

假设 Zip 和 phone 将始终位于字符串的末尾,那么 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'];

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-21
    • 2021-03-07
    • 2012-03-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多