1

我试图解析最后 2 / 部分的 url。我需要获取地址(可以获取)和数字(第二部分 {ie:08078612,08248595} 除非它最后并且没有地址存在 {last url list example} {ie: 8274180})我可选地需要获取第二个数字部分的最后 3 位数字。{即 612,595,180}

到目前为止,我的代码没有任何运气。

$url_list[] = $url;

if(preg_match("/[0-9]/",substr(strrchr($url, '/'), 1))) {
    $url_list_mls[]= substr(strrchr($url, '/'), 2);
    $url_list_mls_last3[] = substr(strrchr($url, '/'), -3); 
} else {
    $url_list_mls[]= substr(strrchr($url, '/'), 1);
    $url_list_mls_last3[] = substr(strrchr($url, '/'), -3);
}

$url_list_addy[]= substr(strrchr($url, '/'), 1);

示例 URL(作为示例的完整 url 结尾的一部分)

/a019/08078612/214-N-CREST-Avenue
/a019/08248595/111-N-Elroy-Avenue
/a019/8274180

我正在尝试制作 3 个列表、地址(最后一部分)编号(第二部分)和第二部分编号的最后 3 个数字。

4

1 回答 1

1

原始代码非常复杂。您可以preg_match_all在一行中捕获所有字符串。由于街道地址部分似乎是有条件的,所以我在我的模式中这样做了。此外,通过将最后 3 个分组{3}在自己的括号中,我们也可以使用它们。我不确定是否a019改变了,所以我也将它包括在内,只是为了展示它是如何完成的。

<?php

$uris = array("/a019/08078612/214-N-CREST-Avenue",
"/a019/08248595/111-N-Elroy-Avenue",
"/a019/8274180",);

$pattern = "!/([a-zA-z][0-9]+)/([0-9]+([0-9]{3}))/?([A-Za-z0-9.-]+)?/?!";

$x=0;
foreach($uris as $uri){
    preg_match_all($pattern,$uri,$matches);

    $address[$x]['scode'] = $matches[1][0];
    $address[$x]['stcode'] = $matches[2][0];
    $address[$x]['last3'] = $matches[3][0];
    if(!empty($matches[4][0])){
        $address[$x]['staddr'] = $matches[4][0];
    }
    $x++;
}


print_r($address);

?>

$地址输出

Array
(
    [0] => Array
        (
            [scode] => a019
            [stcode] => 08078612
            [last3] => 612
            [staddr] => 214-N-CREST-Avenue
        )

    [1] => Array
        (
            [scode] => a019
            [stcode] => 08248595
            [last3] => 595
            [staddr] => 111-N-Elroy-Avenue
        )

    [2] => Array
        (
            [scode] => a019
            [stcode] => 8274180
            [last3] => 180
        )

)
于 2013-08-19T17:13:40.850 回答