为了解析 url,我第一次深入研究了正则表达式。无需过多深入,我基本上想要友好的 url,并且我将每个永久链接保存在数据库中,但由于语言和页面的差异,我只想保存一个永久链接并解析页面和语言的 url。所以,如果我得到这样的东西:
http://domain.com/lang/fr/category/9/category_title/page/3.html
我真正想要的是这个“category/9/category_title”来知道我在哪个页面上。我想出了这个功能:
$return = array();
$string = 'http://domain.com/lang/fr/category/9/category_title/page/3.html';
//Remove domain and http
$string = preg_replace('@^(?:http://)?([^/]+)@i','',$string);
if(preg_match('/^\/lang\/([a-z]{2})/',$string,$langMatches)) {
$return['lang'] = $langMatches[1];
//Remove lang
$string = preg_replace('/^\/lang\/[a-z{2}]+/','',$string);
} else {
$return['lang'] = 'en';
}
//Get extension
$bits = explode(".", strtolower($string));
$return['extension'] = end($bits);
//Remove extension
$string = preg_replace('/\.[^.]+$/','',$string);
if(preg_match('/page\/([1-9+])$/',$string,$pageMatches)) {
$return['page'] = $pageMatches[1];
//Remove lang
$string = preg_replace('/page\/[1-9+]$/','',$string);
} else {
$return['page'] = 1;
}
//Remove additional slashes from beginning and end
$string = preg_replace('#^(/?)|(/?)$#', '', $string);
$return['permalink'] = $string;
print_r($return);
从上面的例子中返回这个:
Array
(
[lang] => fr
[extension] => html
[page] => 3
[permalink] => category/9/category_title
)
这是完美的,正是我想要的。但是我的问题是,我是否正确使用了正则表达式?有没有更好的方法可以做到这一点,例如,我可以在开头和结尾去掉域、扩展名和额外的斜杠吗?