使用PHP解析使用Regex的URL

时间:2010-07-21 20:44:24

标签: php regex

我的网址格式如下:

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

我想要做的是解析state(1),county(2)和street(3)的值。 我可以使用substr(),strpos()和循环的组合来做到这一点。但我认为使用正则表达式会更快,但我不确定我的正则表达式是什么。

4 个答案:

答案 0 :(得分:3)

$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
)
*/

答案 1 :(得分:2)

可以这样做:

<?php

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

?>

答案 2 :(得分:0)

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它会是什么样子......

答案 3 :(得分:0)

这个正则表达式模式应该有效:

$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);