Один из первых раз я углубился в регулярные выражения, чтобы разобрать 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
)
Это идеально и именно то, что я хочу.Однако мой вопрос заключается в том, правильно ли я использовал регулярные выражения?Есть ли лучший способ, которым я мог бы сделать это, например, я мог бы удалить домен, расширение и дополнительные косые черты в начале и конце только одним выражением удара задницы?