用PHP解析一串邮政编码

时间:2013-11-19 21:19:04

标签: php regex

我正在将我的公司从旧服务转移到新系统。我在PHP中编写了一些转换实用程序以方便移动。我要解决的一个问题是转换邮政编码。

在旧系统中,Zips可以在一行中混合使用:

700,701,30518,30511,30000-30010,400,30097,30101-30201

在我的新系统中,每种类型的zip都必须分成它自己的行:

700,701,400
30518,30511,30097
30000-30010,30101-30201

所以我需要导入第一个代码块并将第二个代码块输出到3个变量。我在PHP工作。任何指导?拉链的顺序是随机的。我迷路了。

1 个答案:

答案 0 :(得分:0)

嗯,这就是我得到的:

/(\d+)(-\d+)?/s

/s将忽略换行符。

<?php

$subject = "700,701,400\n30518,30511,30097\n30000-30010,30101-30201\n";

preg_match_all("/(\d+)(-\d+)?/s", $subject, $matches);
print_r($matches[0]);

?>

这是输出:

Array
(
    [0] => 700
    [1] => 701
    [2] => 400
    [3] => 30518
    [4] => 30511
    [5] => 30097
    [6] => 30000-30010
    [7] => 30101-30201
)

或者,你可以这样做:

$arr = explode("\n", $subject);

for ($i = 0; $i < count($arr); $i++) {
    preg_match_all("/(\d+)(-\d+)?/s", $arr[$i], $matches);
    print_r($matches[0]);
}

如果只有三种类型,那么每行只能preg_match

输出:

Array
(
    [0] => 700
    [1] => 701
    [2] => 400
)
Array
(
    [0] => 30518
    [1] => 30511
    [2] => 30097
)
Array
(
    [0] => 30000-30010
    [1] => 30101-30201
)
Array
(
)