php regex city state zip

时间:2010-09-07 22:53:25

标签: php regex

这是来自我拥有的数组

 [citystatezip] => New York, NY 50805-2578

我正在尝试以下面的格式

[city] => New York
[state] => NY
[zip] => 50805-2578

我在php中使用正则表达式但是无处可去。

感谢您的帮助。

3 个答案:

答案 0 :(得分:3)

试试这个正则表达式:

/([^,]+),\s*(\w{2})\s*(\d{5}(?:-\d{4})?)/

翻译成代码:

$str = "New York, NY 50805-2578";
preg_match("/([^,]+),\s*(\w{2})\s*(\d{5}(?:-\d{4})?)/", $str, $matches);

list($arr['addr'], $arr['city'], $arr['state'], $arr['zip']) = $matches;
print_r($arr);

给出:

Array
(
    [zip] => 50805-2578
    [state] => NY
    [city] => New York
    [addr] => New York, NY 50805-2578
)

这个正则表达式:

  • 有一些输入验证(例如:要求输入格式为:XXXXXXX,YY NNNNN-NNNN)

  • 空格是可选的

  • zip的最后4位数字是可选的

答案 1 :(得分:0)

(.+?), (\w+) ([-\d]+)

然后从捕获组中获取信息。

答案 2 :(得分:0)

为什么不这样做。

/(?P<city>[^,]+),\s*(?P<state>\w{2})\s*(?P<zip>\d{5}(?:-\d{4})?)/

拯救你:

$arr['city'] = $matches[1];
$arr['state'] = $matches[2];
$arr['zip'] = $matches[3];

所以当你:

print_r($matches);

你会得到

Array
(
    [city] => New York
    [state] => NY
    [zip] => 50805-2578
)

NullUserException使用的主要表达方式和所有功劳归于他。我只是缩短了这个过程。