我需要拆分地址: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']);
但只获得街道名称......
答案 0 :(得分:2)
您可以使用像
这样的正则表达式/^(.*)\s(\d+)\W+(\d+)$/
如果您需要最后一个空白到第1组,则第2组中的下一个数字和第3组中的最后一个数字。\W+
匹配除字符之外的1 +个字符,因此它匹配{{1 }} 和更多。如果您有-
,请使用连字符而不是-
。
请参阅regex demo和PHP 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+)
)包裹(?:...)?
。