从网址路径获取最后3个单词

时间:2018-08-07 01:42:20

标签: php

这样的网址:

http://localhost/333/ed/a3

我尝试过这样

$pattern = '/(([^ ]*)\s+([^ ]*)\s+([^ ]*))$/';
preg_match($pattern, $_SERVER['REQUEST_URI'], $matches);
$last_word = $matches[0];

我收到错误未定义偏移量:0

2 个答案:

答案 0 :(得分:1)

您的当前错误似乎正在发生,因为数组中没有第零个匹配项。这是因为您的模式与URL不匹配。我看到的最大问题是,您的模式坚持要匹配URL内的某些空格,这是(应该)永远不会发生的。

尝试此版本:

$pattern = '/[^\/]+\/[^\/]+\/[^\/]+$/';
preg_match($pattern, "http://localhost/333/ed/a3", $matches);
$last_word = $matches[0];
print_r(preg_split("/\//", $last_word));

Array
(
    [0] => 333
    [1] => ed
    [2] => a3
)

Demo

答案 1 :(得分:1)

必须是正则表达式吗?如果是这样,我建议使用https://regexr.com

为简单起见,我将展示如何将内置的explode函数与array slice函数一起使用。

http://php.net/manual/en/function.explode.php array explode ( string $delimiter , string $string [, int $limit = PHP_INT_MAX ] )

http://php.net/manual/en/function.array-slice.php array array_slice ( array $array , int $offset [, int $length = NULL [, bool $preserve_keys = FALSE ]] )

未经测试示例:

$url = explode ( '\' , $_SERVER['REQUEST_URI'] ); $last_three = array_slice ( $url, -3, 3 );