Php 动态url上的preg_匹配

Php 动态url上的preg_匹配,php,preg-match,Php,Preg Match,在php中有没有一种方法可以在下面这样的url上进行preg_匹配 dynamic/dynamic/dev/new_mobile/lib 而且它只会拉出dev/new\u mobile,链接也有这样的能力 动态/动态/动态/tst/new_mobile/lib 在上面的示例中,它只会拉出tst/new\u mobile。关键是它会抓取lib之前的最后两个目录。你知道怎么做吗?只需先分解,然后反向排列,简单易用 $array_url = explode('/',$url); $tmp_array

在php中有没有一种方法可以在下面这样的url上进行preg_匹配

dynamic/dynamic/dev/new_mobile/lib

而且它只会拉出
dev/new\u mobile
,链接也有这样的能力

动态/动态/动态/tst/new_mobile/lib


在上面的示例中,它只会拉出
tst/new\u mobile
。关键是它会抓取lib之前的最后两个目录。你知道怎么做吗?

只需先分解,然后反向排列,简单易用

$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];
    }
}
$the_two_before=”“;
对于($i=0;$i
只需先分解后反转数组,简单易用

$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];
    }
}
$the_two_before=”“;
对于($i=0;$i
这里有一个正则表达式,可以得到您想要的部分:

$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个目录,允许在lib目录之前和之后有任何目录。它还将匹配一些您未提及是否需要的边缘案例:

tst/new_mobile/lib/foo/bar
/tst/new_mobile/lib/foo/bar

下面是一个正则表达式,它将获得您想要的部分:

$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个目录,允许在lib目录之前和之后有任何目录。它还将匹配一些您未提及是否需要的边缘案例:

tst/new_mobile/lib/foo/bar
/tst/new_mobile/lib/foo/bar

你试过什么?让我们知道,如果你有一个问题,那么事情是开发和新的移动也可以改变,我忘了提到可能有更多的目录后,库。唯一不变的是,在lib之前,我需要获取两个目录。您是否尝试过使用
preg_match
?因为它几乎可以处理任何你可以扔给它的东西。或者你的问题是“请为我写我的正则表达式,因为我不知道怎么写”?你试过什么?让我们知道,如果你有一个问题,那么事情是开发和新的移动也可以改变,我忘了提到可能有更多的目录后,库。唯一不变的是,在lib之前,我需要获取两个目录。您是否尝试过使用
preg_match
?因为它几乎可以处理任何你可以扔给它的东西。或者你的问题是“请为我写我的正则表达式,因为我不知道怎么写”?问题是dev和new_mobile也可能会改变,我忘了提到lib之后可能会有更多的目录。唯一不变的是,在lib之前,我需要记住两个目录,以便更准确地解释为什么需要它?可能有一个通过$\u服务器变量的选项,但我不确定是否合适。我需要它,因为我在$\u会话中保存了这两个变量,以后我必须在应用程序中使用它来查找正确的文件。这非常有效。我将.length改为count($tmp\u array\u url);它工作得很好。问题是dev和new_mobile也可能会改变,我忘了提到lib之后可能会有更多的目录。唯一不变的是,在lib之前,我需要记住两个目录,以便更准确地解释为什么需要它?可能有一个通过$\u服务器变量的选项,但我不确定是否合适。我需要它,因为我在$\u会话中保存了这两个变量,以后我必须在应用程序中使用它来查找正确的文件。这非常有效。我将.length改为count($tmp\u array\u url);而且效果很好。