如何用PHP拆分包含带变音符号的邮编与城镇的字符串
用PHP拆分带变音符号的邮编与城镇名称字符串
刚好之前处理过类似的需求,针对你提到的两种邮编格式(连续5位数字,或者3位+2位带空格)、城镇名带变音符号的字符串拆分,用正则表达式是最省心的方案——既能精准匹配邮编模式,还能完美兼容Unicode变音字符。
直接上可运行的代码示例:
<?php // 你的示例数据 $addressList = [ '60200 Praha', '73000 Valašské Meziříčí', '641 02 Nové Město nad Metují' ]; // 核心正则:匹配两种邮编格式,同时兼容Unicode字符 $zipTownPattern = '/^(\d{5}|\d{3} \d{2}) (.*)$/u'; foreach ($addressList as $address) { if (preg_match($zipTownPattern, $address, $matches)) { $zipcode = trim($matches[1]); // 保险起见加个trim,防止意外空格 $town = trim($matches[2]); // 这里可以替换成你需要的业务逻辑,比如存储到变量或数据库 echo "拆分结果:邮编 = {$zipcode},城镇名 = {$town}\n"; } else { echo "⚠️ 无法识别的格式:{$address}\n"; } } ?>
代码细节解释:
- 正则里的
(\d{5}|\d{3} \d{2})是捕获邮编的分组:\d{5}匹配连续5位数字,\d{3} \d{2}匹配带空格的3+2位邮编,用|做或逻辑 (.*)用来捕获城镇名部分,因为加了u修饰符,所以能正确识别所有Unicode变音字符(比如š、é、ří这些)u修饰符是关键!没有它的话,正则可能会把变音符号当成乱码处理,导致城镇名截取错误
如果你的字符串里偶尔会出现多个空格分隔邮编和城镇,或者开头有多余空白,可以把正则里的单个空格改成\s+(匹配一个或多个空白字符),调整后的正则是:
/^(\d{5}|\d{3} \d{2})\s+(.*)$/u
这样就更灵活啦~
内容的提问来源于stack exchange,提问作者k4mk4m
相关产品推荐
相关产品推荐

