我试图解析最后2个/部分的网址。 我需要得到地址(可以得到那个)和数字(第二部分{ie:08078612,08248595},除非它最后没有地址存在{last url list example} {ie:8274180}) 我可选择获得第二个唯一数字部分的最后3位数字。{ie 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);
示例网址(作为示例的完整网址结尾的一部分)
/a019/08078612/214-N-CREST-Avenue
/a019/08248595/111-N-Elroy-Avenue
/a019/8274180
我试图制作3个列表,地址(最后一部分)编号(第二部分)和第二部分编号的最后3个编号。
答案 0 :(得分: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
)
)