preg_match по динамическому URL - PullRequest
       11

preg_match по динамическому URL

1 голос
/ 13 января 2012

Есть ли в php способ сделать preg_match для URL, как показано ниже

динамический / динамический / DEV / new_mobile / Lib

и он только вытащит dev/new_mobile, и ссылка также может быть такой же

Динамическая / динамическая / динамическая / TST / new_mobile / Библиотека

В приведенном выше примере это будет только вытащить tst/new_mobile. Ключ в том, что он захватит последние две директории перед lib. Есть идеи, как это можно сделать?

Ответы [ 2 ]

2 голосов
/ 13 января 2012

Вот регулярное выражение, которое получит нужную вам часть:

$url = 'dynamic/tst/new_mobile/lib/foo/bar';

if (preg_match('#^(?:.*?/)?([^/]+/[^/]+)/lib(?:/.+)?$#', $url, $matches)) {
    $part = $matches[1];
    var_dump($part); // "tst/new_mobile"
}

Это позволит получить 2 каталога до каталога lib с учетом любых каталогов до и после. Он также будет соответствовать паре крайних случаев, которые вы не упоминаете, нужно ли вам:

tst/new_mobile/lib/foo/bar
/tst/new_mobile/lib/foo/bar
2 голосов
/ 13 января 2012

просто взорвите, затем переверните массив, просто и легко использовать.

$array_url = explode('/',$url);

$tmp_array_url = array_reverse($array_url);

тогда вы сможете восстановить, как хотите, не нужно удивляться, сколько динамических частей появилось раньше.

РЕДАКТИРОВАТЬ: так как вы получили константу 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];
    }
}
...