这样的网址:
我尝试过这样
$pattern = '/(([^ ]*)\s+([^ ]*)\s+([^ ]*))$/';
preg_match($pattern, $_SERVER['REQUEST_URI'], $matches);
$last_word = $matches[0];
我收到错误未定义偏移量:0
答案 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
)
答案 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 );