动态网址上的preg_match

时间:2012-01-13 18:26:35

标签: php preg-match

在php中是否有办法在下面的网址上执行preg_match

  

动态/动态的/ dev / new_mobile / lib中

它只会拉出dev/new_mobile,链接也有能力像这样

  

动态/动态/动态/ TST / new_mobile / lib中

在上面的示例中,它只会提取tst/new_mobile。关键是它会在lib之前获取最后两个目录。知道如何做到这一点?

2 个答案:

答案 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