用PHP解析一组邮政编码

用PHP解析一组邮政编码,php,regex,Php,Regex,我正在将我的公司从传统服务转移到新系统。我已经用PHP编写了一些转换实用程序,以方便迁移。我要讨论的一个问题是转换邮政编码 在旧系统中,拉链可以混合在一条线上: 700,701,30518,30511,30000-30010,400,30097,30101-30201 在我的新系统中,每种类型的拉链都必须分为自己的系列: 700,701,400 30518,30511,30097 30000-30010,30101-30201 所以我需要导入第一个代码块,然后将第二个代码块输出到3个变量。我

我正在将我的公司从传统服务转移到新系统。我已经用PHP编写了一些转换实用程序,以方便迁移。我要讨论的一个问题是转换邮政编码

在旧系统中,拉链可以混合在一条线上:

700,701,30518,30511,30000-30010,400,30097,30101-30201
在我的新系统中,每种类型的拉链都必须分为自己的系列:

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

所以我需要导入第一个代码块,然后将第二个代码块输出到3个变量。我在PHP工作。有什么指导吗?拉链的顺序是随机的。我迷路了。

好吧,这就是我得到的:

/(\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]);

?>
或者,您可以执行以下操作:

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

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

700
00700
的速记吗?不是,是70000-70099的速记。这看起来是我需要的。非常感谢您的快速回复。我明天上班时会试试。我将在这里发布我的结果。@user1499521有一些正则表达式站点,如
regexer
regexpal
,允许您测试类似的内容,这促使我快速响应。你不必等待,直到你开始工作时,你可以自己复制它。
$arr = explode("\n", $subject);

for ($i = 0; $i < count($arr); $i++) {
    preg_match_all("/(\d+)(-\d+)?/s", $arr[$i], $matches);
    print_r($matches[0]);
}
Array
(
    [0] => 700
    [1] => 701
    [2] => 400
)
Array
(
    [0] => 30518
    [1] => 30511
    [2] => 30097
)
Array
(
    [0] => 30000-30010
    [1] => 30101-30201
)
Array
(
)