我正在尝试检测URI是否存在获取参数等问题。我只需要获取/ val1 / val2,无论是否有任何URL获取参数等。如何在php中做到这一点?
谢谢
$regex = '/^\/index.php?(.*)?\?+$/';
// Here are some example URLS
site.com/val1/val2
site.com/index.php/val1/val2
site.com/index.php/val1/val2?get1=val1&get2=val2
无论uri左侧还是右侧,我都希望能够对(/ val1 / val2)进行分组
答案 0 :(得分:2)
您可以使用
(?:/[^/?#]+){2}(?=[?#]|$)
请参见regex demo
详细信息
(?:/[^/?#]+){2}
-两次重复/
,然后重复1个以上的字符,而不是/
,?
和#
(?=[?#]|$)
-与位置相匹配的正向超前,其后紧跟?
,#
或字符串结尾。这里是regex graph:
$re = '~(?:/[^/?#]+){2}(?=[?#]|$)~';
$str = 'site.com/val1/val2';
if (preg_match($re, $str, $match)) {
print_r($match[0]);
} // => /val1/val2
答案 1 :(得分:2)
我们可以首先尝试在?
上拆分字符串,以删除查询字符串(如果存在)。然后,用/
路径分隔符分割并访问最后两个路径:
$url = "site.com/index.php/val1/val2?get1=val1&get2=val2";
$url = explode('?', $url)[0];
$paths = explode('/', $url);
echo "second to last element: " . $paths[count($paths)-2] . "\n";
echo "last element: " . $paths[count($paths)-1];
此打印:
second to last element: val1
last element: val2
此答案避免完全使用正则表达式,这可能会导致性能稍好。