Разбор URL с помощью Regex с использованием PHP - PullRequest
0 голосов
/ 22 июля 2010

У меня есть URL, отформатированный так:

http://www.example.com/detail/state-1/county-2/street-3

Что я хотел бы сделать, это проанализировать значения для штата (1), графства (2) и улицы (3). Я мог бы сделать это с помощью комбинации substr (), strpos () и цикла. Но я думаю, что использование регулярного выражения будет быстрее, однако я не уверен, каким будет мое регулярное выражение.

Ответы [ 4 ]

3 голосов
/ 22 июля 2010
$pieces = parse_url($input_url);
$path = trim($pieces['path'], '/');
$segments = explode('/', $path);

foreach($segments as $segment) {
    $keyval = explode('-', $segment);
    if(count($keyval) == 2) {
        $key_to_val[$keyval[0]] = $keyval[1];
    }
}

/*
$key_to_val: Array (
    [state] => 1,
    [county] => 2,
    [street] => 3
)
*/
2 голосов
/ 22 июля 2010

Могли бы просто сделать это:

<?php

$url = "http://www.example.com/detail/state-1/county-2/street-3";
list( , $state, $country, $street) = explode('/', parse_url($url, PHP_URL_PATH));

?>
0 голосов
/ 22 июля 2010

Этот шаблон регулярного выражения должен работать:

$subject = 'http://www.example.com/detail/state-1/county-2/street-3';
$pattern = 'state-(\\d+)/county-(\\d+)/street-(\\d+)';

preg_match($pattern, $subject, $matches);
// matches[1],[2],[3] now stores (the values) 1,2,3 (respectively)

print_r($matches); 
0 голосов
/ 22 июля 2010
if (preg_match_all('#([a-z0-9_]*)-(\\d+)#i', $url, $matches, PREG_SET_ORDER)) {
    $matches = array(
        array(
            'state-1',
            'state',
            '1',
        ),
        array(
            'county-2',
            'county',
            '2',
        ),
        array(
            'street-3',
            'street',
            '3',
        )
    );

}

Обратите внимание, что это структура массива $matches (как бы он выглядел, если бы вы var_dump 'd it ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...