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 回答