用PHP解析一组邮政编码
我正在将我的公司从传统服务转移到新系统。我已经用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个变量。我
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
(
)