2010-03-24 1 views
1

я должен установить некоторые правила маршрутизации в моем PHP приложения, и они должны быть в виде /% вар/что-то/еще /% another_varНахождение тегов в строке запроса с регулярным выражением

Другими словами я Beed регулярное выражение, которое возвращает мне каждую часть URI, помеченную символом%, String, обозначенная символом%, представляет имена переменных, поэтому они могут быть почти каждой строкой.

другой пример: с /% Ланг/модуль/контроллер/действие /% var_1 я хочу регулярное выражение для извлечения Ланг и Var_1

я пытался что-то вроде

/.*%(.*)[\/$]/ 

но это Безразлично» t работа .....

ответ

1

Видя, что это правила маршрутизации, и вам может понадобиться все части в какой-то момент, вы также можете разбить строку cla ssical путь:

$path_exploded = explode("/", $path); 
foreach ($path_exploded as $fragment) if ($fragment[0] == "%") 
    echo "Found $fragment"; 
+0

спасибо, что это работает (и это очень просто, мне нужно спать сейчас) =) – fatmatto

1
$str='/%var/something/else/%another_var'; 
$s = explode("/",$str); 
$whatiwant = preg_grep("/^%/",$s); 
print_r($whatiwant); 
+0

+1 Более элегантный, чем мой, из-за 'preg_grep'. –

0

Вы можете использовать:

$str = '/%lang/module/controller/action/%var_1';  
if(preg_match('@/%(.*?)/[^%]*%(.*?)[email protected]',$str,$matches)) { 
     echo "$matches[1] $matches[2]\n"; // prints lang var_1  
} 
1

Я не вижу необходимости, чтобы замедлить ваш скрипт с регулярным выражением ... отделка() и взорваться() делать все, что вам нужно:

function extract_url_vars($url) 
{ 
    if (FALSE === strpos($url, '%')) 
    { 
     return $url; 
    } 

    $found = array(); 
    $parts = explode('/%', trim($url, '/')); 

    foreach ($parts as $part) 
    { 
     $tmp  = explode('/', $part); 
     $found[] = ltrim(array_shift($tmp), '%'); 
    } 

    return $found; 
} 

// Test 
    print_r(extract_url_vars('/%lang/module/controller/action/%var_1')); 

// Result: 
Array 
(
    [0] => lang 
    [1] => var_1 
) 

 Смежные вопросы

  • Нет связанных вопросов^_^