我有一个网址,格式如下:解析URL与正则表达式使用PHP
http://www.example.com/detail/state-1/county-2/street-3
我希望做的是解析出值状态(1),县(2),和街道(3)。 ) 我可以做到这一点使用SUBSTR(组合,strpos(),和一个循环。但我认为使用正则表达式会更快,但我不确定我的正则表达式会是什么。
我有一个网址,格式如下:解析URL与正则表达式使用PHP
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
倒是它的结构.. 。
这个正则表达式应该工作:
$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);
难道你不是指'比赛[1],[2],[3]现在存储1,2,3'?请记住'[0]'始终是完整的模式匹配... – ircmaxell 2010-07-21 21:00:14
是否有不为PHP分割功能,如分裂(“/”)[一定数量]? – Anders 2010-07-21 20:47:23
实际explode()将是最快的方式,因为它不使用正则表达式匹配....因为您使用的是跨越/的分隔的url,您可以使用explode(“/”,substr($ url,strlen (“http://www.example.com/”),strlen($ url)))并获取一组东西 – 2010-07-21 20:53:13