当我在PHP中找到某个字符时,如何停止正则表达式?

时间:2013-03-21 12:38:37

标签: php regex url url-rewriting rewrite

我有一个字符串/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
)

问题是,我希望这一切都在正则表达式中。我真的不在乎是否有另一种方式(我知道有),我只是想知道在正则表达式中是否有办法做到这一点。

由于

3 个答案:

答案 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)

我在使用正则表达式之前使用strpossubstr在我的系统中执行此操作:

$uri = $_SERVER['REQUEST_URI'];
$uri = ($pos = strpos($uri, '?')) ? substr($uri, 0, $pos) : $uri;