文字列からパラメーターを抽出しようとして、約 2 時間座っています。パラメータの数に関係なく。
これを考えてみましょう(例)、
$template = "/category/(:any)/(:any)/(:any)/";
$input = "/category/username/category-id/2";
And I would like an array of parameters to be like this,
Array (
[0] => username
[1] => category-id
[2] => 2
)
だから、私はから始めました、
$replacements = array(
'(:any)' => '.+(?=/|$)',
);
$str = '/category/(:any)/(:any)/(:any)';
$str = str_replace(array_keys($replacements), array_values($replacements), $str);
$input = '/category/username/category-id/2';
$pattern = '~^' . $str . '$~';
preg_match($pattern, $input, $matches);
print_r($matches);
// That prints Array ( [0] => /category/username/category-id/2 )
しかし今、私は適切なパラメータ抽出にこだわっています。最初に頭に浮かぶのは、2 つの文字列間で類似した値を見つけて削除することです。(:any)
次に、と を取り外し/
ます。
$template = "/category/(:any)/(:any)/(:any)/";
$input = "/category/username/category-id/2";
問題は、に依存する多くの余分な作業が必要になることですexplode()
。
問題は次のとおりです:(最初のコード例を見てください):どうすれば正規表現を使用してそれを適切に達成できます$matches
か?