解析地址字符串的省市区

 

// 解析地址字符串 返回 province city district street 信息 或 false
function parseAddress($address = ''){
    if( preg_match('#(?<province>.+?(省|自治区))?(?<city>.+?(盟|自治州|地区))(?<district>.+?(市|区|旗|县))?(?<street>.+?(乡|镇|街道))?#', $address, $info)
        || preg_match('#(?<province>.+?(省|自治区))?(?<city>.+?市)(?<district>.+?(市|区|旗|县))?(?<street>.+?(乡|镇|街道))?#', $address, $info)
        || preg_match('#(?<province>.+?省)?(?<city>.+?(市|县))(?<district>.{2,16}?镇)(?<street>.+?县)?#', $address, $info)
        || preg_match('#(?<city>.+?市)(?<district>.+?(区|县))?(?<street>.+?(乡|街道))?#', $address, $info)
        || preg_match('#^(?<province>(香港|台湾|澳門|澳门))#', $address, $info)
    ){
        if((!isset($info['province']) || empty($info['province'])) && isset($info['city']) && in_array($info['city'], ['北京市', '上海市', '天津市', '重庆市'])){
            $info['province'] = $info['city'];
            $info['city'] .= '市辖区';
        }

        $i = 0;
        while(isset($info[$i])){
            unset($info[$i]);
            $i++;
        }
        return $info;
    }
    return false;
}

 

PHP