【问题标题】:Split address street name house number and room number拆分地址街道名称门牌号和房间号
【发布时间】:2017-06-29 10:06:00
【问题描述】:

我需要将地址: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']);但只得到街道名称...

【问题讨论】:

    标签: php regex preg-match explode


    【解决方案1】:

    你可以使用正则表达式

    /^(.*)\s(\d+)\W+(\d+)$/
    

    如果您需要直到最后一个空格进入第 1 组,接下来的数字进入第 2 组,最后一个数字进入第 3 组。\W+ 匹配 1+ 字符而不是单词字符,因此它匹配 - 等等.如果你有-,只需使用连字符而不是\W+

    查看regex demoPHP 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+ 非单词字符
    • (\d+) - 第 3 组:一位或多位数字
    • $ - 字符串结束。

    另外,请注意,如果最后一部分是可选的,请将 \W+(\d+) 包装为可选的捕获组(即(?:...)?(?:\W+(\d+))?)。

    【讨论】:

    • @Wiktor Stribiżew...你真是个天才。谢谢你。是的正则表达式好决定。
    • 我对@9​​87654339@ 的正则表达式进行了一点编辑,现在没有错误...我需要使用您的可选建议。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-08-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多