Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 分开地址街道名称门牌号和房间号_Php_Regex_Preg Match_Explode - Fatal编程技术网

Php 分开地址街道名称门牌号和房间号

Php 分开地址街道名称门牌号和房间号,php,regex,preg-match,explode,Php,Regex,Preg Match,Explode,我需要拆分地址:主街道202-52到 street=Main Str. 门牌号=202 房间号=52 我试着用这个: $data['address'] = "Main Str. 202-52"; $data['street'] = explode(" ", $data['address']); $data['building'] = explode("-", $data['street'][0]); 当街道命名一个单词时,它就起作用了。如何拆分地址,其中街道名称有多个单词。 我尝试了$data

我需要拆分地址:
主街道202-52
street=Main Str.
门牌号=202
房间号=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+

见附录a和a:

图案详情:

  • ^
    -字符串的开头
  • (.*)
    -组1捕获除换行符以外的任何0+字符,尽可能多地捕获到最后一个字符
  • \s
    -空格,后跟
  • (\d+)
    -第2组:一个或多个数字
  • \W+
    -1+非单词字符
  • (\d+)
    -第3组:一个或多个数字
  • $
    -字符串结束

另外,请注意,如果最后一部分是可选的,请使用可选的捕获组(即,
(?:…)?
(?:\W+(\d+)),
(?:\W+),
)。

@Wiktor Stribiżew。。。你是天才。非常感谢。是的,正则表达式的决定很好。我稍微编辑了正则表达式到
'/^(.*)s(\d+)(:\W+(\d+))$/'
现在没有错误。。。我需要你的建议。
$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
}