1

私は文字列を持っています/controller/method/parameter1/parameter2?parameter1=parameter2。これはREQUEST_URI私が自分のウェブサイトに使用しているだけです。

PHP を使用してこの文字列を個別の配列要素に分割したいのですが、次のコードはこのアクションに対して正常に機能します: preg_split('[/]', $_SERVER['REQUEST_URI'], NULL, PREG_SPLIT_NO_EMPTY).

これはほぼ完全に機能し、get 変数を追加するまでは優れた配列出力が得られます。これらを使用すると、最後の配列要素にも get 変数が含まれます。

私の質問は、疑問符 (?) に達するとすぐに処理を停止する方法はありますか?

クエスチョン マークから切り取り、クエスチョン マークの前のアイテムのみを表示したい。これは(うまくいけば)次のことを意味します。

Array
(
    [0] => controller
    [1] => method
    [2] => parameter1
    [3] => parameter2?parameter1=parameter2
)

これになります:

Array
(
    [0] => controller
    [1] => method
    [2] => parameter1
    [3] => parameter2
)

問題は、これをすべて正規表現にしたいということです。別の方法があるかどうかは気にしません(あることは知っています)。正規表現でこれを行う方法があるかどうかを知りたいだけです。

ありがとう

4

3 に答える 3

2

分割前に爆発

$vars = explode('?', $_SERVER['REQUEST_URI']);

$array = preg_split('[/]', $vars[0], NULL, PREG_SPLIT_NO_EMPTY);

アップデート

php.netから:

正規表現の力が必要ない場合は、 explode( )str_split () などのより高速な (単純ではありますが) 代替手段を選択できます。

あなたの場合、str_splitを使用して時間を節約できます。

于 2013-03-21T12:40:56.957 に答える
1

次を使用して ?(.*) を置き換えることができます。

preg_split('[/]', 
preg_replace("/\?(.*)/", "", $_SERVER['REQUEST_URI']), 
NULL, PREG_SPLIT_NO_EMPTY)
于 2013-03-21T12:45:22.457 に答える
0

正規表現を使用する前に、システムでこれを行いますstrpossubstr

$uri = $_SERVER['REQUEST_URI'];
$uri = ($pos = strpos($uri, '?')) ? substr($uri, 0, $pos) : $uri;
于 2013-03-21T12:44:55.897 に答える