在php中是否有办法在下面的网址上执行preg_match
动态/动态的/ dev / new_mobile / lib中
它只会拉出dev/new_mobile
,链接也有能力像这样
动态/动态/动态/ TST / new_mobile / lib中
在上面的示例中,它只会提取tst/new_mobile
。关键是它会在lib之前获取最后两个目录。知道如何做到这一点?
答案 0 :(得分:2)
爆炸然后反向阵列,简单易用。
$array_url = explode('/',$url);
$tmp_array_url = array_reverse($array_url);
然后你可以像你一样重建,不需要怀疑之前有多少动态部件。
echo $tmp_array_url[0]; // "lib";
echo $tmp_array_url[1]; // "new_mobile";
echo $tmp_array_url[2]; // "dev";
编辑:既然你有lib常量,那就做这样的事情:
$the_two_before = "";
for($i = 0; $i < count($tmp_array_url); $i++){
if($tmp_array_url[$i] == "lib"){
$the_two_before = $tmp_array_url[$i+2]."/".$tmp_array_url[$i+1];
}
}
答案 1 :(得分:2)
这是一个正则表达式,可以获得你想要的部分:
$url = 'dynamic/tst/new_mobile/lib/foo/bar';
if (preg_match('#^(?:.*?/)?([^/]+/[^/]+)/lib(?:/.+)?$#', $url, $matches)) {
$part = $matches[1];
var_dump($part); // "tst/new_mobile"
}
这将获得lib目录之前的2个目录,允许之前和之后的任何目录。它还会匹配您不需要提及的几个边缘情况:
tst/new_mobile/lib/foo/bar
/tst/new_mobile/lib/foo/bar