拆分地址街道名称门牌号码和房间号码

时间:2017-02-10 22:46:39

标签: php regex preg-match explode

我需要拆分地址:Main Str. 202-52 street=Main Str. house No.=202 room No.=52 我试着用这个:

$data['address'] = "Main Str. 202-52";
$data['street'] = explode(" ", $data['address']);
$data['building'] = explode("-", $data['street'][0]);

当街道名称一字时它正在工作。街道名称有多个单词的拆分地址。 我试过$data['street'] = preg_split('/[0-9]/', $data['address']);但只获得街道名称......

1 个答案:

答案 0 :(得分:2)

您可以使用像

这样的正则表达式
/^(.*)\s(\d+)\W+(\d+)$/

如果您需要最后一个空白到第1组,则第2组中的下一个数字和第3组中的最后一个数字。\W+匹配除字符之外的1 +个字符,因此它匹配{{1 }} 和更多。如果您有-,请使用连字符而不是-

请参阅regex demoPHP demo

\W+

模式细节:

  • $s = "Main Str. 202-52"; if (preg_match('~^(.*)\s(\d+)\W+(\d+)$~', $s, $m)) { echo $m[1] . "\n"; // Main Str. echo $m[2] . "\n"; // 202 echo $m[3]; // 52 } - 字符串开头
  • ^ - 第1组捕获除了换行符之外的任何0 +字符,直到最后一次....
  • (.*) - 空白,然后是......
  • \s - 第2组:一个或多个数字
  • (\d+) - 1 +非单词字符
  • \W+ - 第3组:一个或多个数字
  • (\d+) - 字符串结束。

另请注意,如果最后一部分可以是可选的,请使用可选的捕获组($\W+(\d+))包裹(?:...)?