URLを解析するために、初めて正規表現を詳しく調べました。あまり深く掘り下げることなく、基本的にわかりやすいURLが必要で、各パーマリンクをデータベースに保存していますが、言語とページの違いのため、1つのパーマリンクのみを保存してページと言語の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
)
これは完璧で、まさに私が欲しいものです。しかし、私の質問は、正規表現を正しく使用することについて行ったのかということです。これを行うためのより良い方法はありますか?たとえば、ドメイン、拡張機能、および最初と最後の追加のスラッシュを1つのキックアス式で削除できますか?