我有一个字符串/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
)
问题是,我希望这一切都在正则表达式中。我真的不在乎是否有另一种方式(我知道有),我只是想知道在正则表达式中是否有办法做到这一点。
由于
答案 0 :(得分:2)
拆分前爆炸
$vars = explode('?', $_SERVER['REQUEST_URI']);
$array = preg_split('[/]', $vars[0], NULL, PREG_SPLIT_NO_EMPTY);
<强>更新强>
来自php.net:
如果您不需要正则表达式的强大功能,您可以选择 更快(虽然更简单)的替代方案,如explode()或str_split()。
在您的情况下,您可以使用 str_split 并节省一些时间。
答案 1 :(得分:1)
您可以使用:
替换?(。*)preg_split('[/]',
preg_replace("/\?(.*)/", "", $_SERVER['REQUEST_URI']),
NULL, PREG_SPLIT_NO_EMPTY)
答案 2 :(得分:0)
我在使用正则表达式之前使用strpos
和substr
在我的系统中执行此操作:
$uri = $_SERVER['REQUEST_URI'];
$uri = ($pos = strpos($uri, '?')) ? substr($uri, 0, $pos) : $uri;