URL-адрес анализа с помощью Regex с использованием PHP

У меня есть URL-адрес, подобный этому:

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

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

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

Можно просто сделать это:

 <?php $url = "http://www.example.com/detail/state-1/county-2/street-3"; list( , $state, $country, $street) = explode('/', parse_url($url, PHP_URL_PATH)); ?> 
 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 (как он выглядит, если вы var_dump 'd it …

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

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