拆分地址街道名称门牌号和房间号
Split address street name house number and room number
我需要拆分地址: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']);
但只得到街道名称...
您可以使用像
这样的正则表达式
/^(.*)\s(\d+)\W+(\d+)$/
如果您需要所有直到最后一个空格进入第 1 组,接下来的数字进入第 2 组,最后一个数字进入第 3 组。\W+
匹配 1+ 个字符而不是单词字符,所以它匹配 -
等等。如果那里有 -
,只需使用连字符而不是 \W+
。
参见 regex demo and a PHP demo:
$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
- 空格,后跟...
(\d+)
- 第 2 组:一个或多个数字
\W+
- 1+ non-word 个字符
(\d+)
- 第 3 组:一个或多个数字
$
- 字符串结尾。
此外,请注意,如果最后一部分是可选的,请将 \W+(\d+)
包裹在可选的捕获组中(即 (?:...)?
、(?:\W+(\d+))?
)。
我需要拆分地址: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']);
但只得到街道名称...
您可以使用像
这样的正则表达式/^(.*)\s(\d+)\W+(\d+)$/
如果您需要所有直到最后一个空格进入第 1 组,接下来的数字进入第 2 组,最后一个数字进入第 3 组。\W+
匹配 1+ 个字符而不是单词字符,所以它匹配 -
等等。如果那里有 -
,只需使用连字符而不是 \W+
。
参见 regex demo and a PHP demo:
$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
- 空格,后跟...(\d+)
- 第 2 组:一个或多个数字\W+
- 1+ non-word 个字符(\d+)
- 第 3 组:一个或多个数字$
- 字符串结尾。
此外,请注意,如果最后一部分是可选的,请将 \W+(\d+)
包裹在可选的捕获组中(即 (?:...)?
、(?:\W+(\d+))?
)。