You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP新手求助:如何从字符串中匹配出所有邮政编码?

解决PHP提取多个邮政编码的问题

你的问题核心在于两个点:

  1. 原代码使用的preg_match()仅会返回第一个匹配结果,无法捕获所有符合规则的邮编;
  2. 两次独立的正则匹配可以合并为一个,简化逻辑。

修改后的代码

private function findPostCode(string $string): array|null
{
    // 合并正则:兼容带/不带连字符、带/不带空格的邮编格式,\b确保匹配独立的邮编
    preg_match_all("/\b\d{2}(?:\s*-?|-?\s*)\d{3}\b/", $string, $matches);
    
    // 有匹配结果则返回所有邮编数组,无结果返回null
    return !empty($matches[0]) ? $matches[0] : null;
}

关键改动说明

  • preg_match_all():该函数会遍历整个字符串,捕获所有符合正则规则的匹配项,最终所有匹配到的邮编会存储在$matches[0]数组中。
  • 合并后的正则规则:\d{2}(?:\s*-?|-?\s*)\d{3} 可以覆盖以下常见邮编格式:
    • 无连字符:99888、99 888
    • 带连字符:99-888、99 -888、99- 888
  • \b边界符:确保匹配的是独立的邮编,避免从更长的数字串中误截取(比如不会把1234567拆成12345)。
  • 返回逻辑简化:直接通过empty()判断匹配结果,替代原代码的两次冗余判断。

测试效果

当传入字符串"99888 12-230 city street 98-234"时,函数会返回数组:

["99888", "12-230", "98-234"]

内容的提问来源于stack exchange,提问作者qfwe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 04:09:25