我正在将我的公司从旧服务转移到新系统。我在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工作。任何指导?拉链的顺序是随机的。我迷路了。
答案 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
(
)