Поиск тегов в строке запроса с регулярным выражением - PullRequest
1 голос
/ 24 марта 2010

Я должен установить некоторые правила маршрутизации в моем приложении php, и они должны быть в форме /% Вар / что-то / еще /% another_var

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

другой пример: из /% lang / module / controller / action /% var_1 я хочу, чтобы регулярное выражение извлекало lang и var_1

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

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

но это не работает .....

Ответы [ 4 ]

1 голос
/ 24 марта 2010

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

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
)
1 голос
/ 24 марта 2010

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

$path_exploded = explode("/", $path);
foreach ($path_exploded as $fragment) if ($fragment[0] == "%") 
  echo "Found $fragment";
1 голос
/ 24 марта 2010
$str='/%var/something/else/%another_var';
$s = explode("/",$str);
$whatiwant = preg_grep("/^%/",$s);
print_r($whatiwant);
0 голосов
/ 24 марта 2010

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

$str = '/%lang/module/controller/action/%var_1';    
if(preg_match('@/%(.*?)/[^%]*%(.*?)$@',$str,$matches)) {
        echo "$matches[1] $matches[2]\n"; // prints lang var_1    
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...