PHP正则表达式获取url段

PHP正则表达式获取url段,php,regex,Php,Regex,有人能帮忙吗 我想获取url的前两段 例如,url可以如下所示 /catalog/category-1 或 我现在的正则表达式看起来像这样 /(\/catalog\/.*?)\// 这适用于长url,但不适用于第一个示例。不要使用正则表达式解析url。使用内置功能 从该函数中获取路径组件后,可以使用该函数根据斜杠分隔URL的各个部分 <?php $url = "http://example.com/this/that/other?page=1"; $parts = parse_ur

有人能帮忙吗

我想获取url的前两段 例如,url可以如下所示

/catalog/category-1

我现在的正则表达式看起来像这样

/(\/catalog\/.*?)\//

这适用于长url,但不适用于第一个示例。

不要使用正则表达式解析url。使用内置功能

从该函数中获取路径组件后,可以使用该函数根据斜杠分隔URL的各个部分

<?php

$url = "http://example.com/this/that/other?page=1";

$parts = parse_url($url);

print 'Parts = ';
print_r($parts);

print 'Path = ' . $parts['path'] . "\n";

$path_components = explode( '/', $parts['path'] );
print "Path components = ";
print_r( $path_components );

?>
试一试

编辑:
正如@Crisp在评论中指出的,为了防止第一个\u段为空,
trim
分解之前先修剪字符串。

首先,使用parse\u url将url拆分为主机、端口、路径和查询字符串

然后,在路径上使用此正则表达式:

<?php
preg_match('#^/([^/]+)/([^/]+)#i', $path, $matches);
?>

Regex
并不像其他人指出的那样是这种情况下最好的工具,但这里它使用的是
Regex

您的
正则表达式的问题是您试图匹配三个
/
,请使用否定:

$str1='/catalog/category-1';
$str2='/catalog/category-1/filter/value';

preg_match('#/[^/]*/[^/]*#',$str1,$match);
echo $match[0].;

preg_match('#/[^/]*/[^/]*#',$str2,$match);
echo $match[0];
输出:

/catalog/category-1
/catalog/category-1
说明:

/      # Match first /
[^/]*  # Match anything not a /
/      # Match second /
[^/]*  # Match anything not a /

解析url不会起作用。所有片段都将保留在路径部分的
path
@matheusaezevedo如何
explode
?@eisberg正是我的答案(:永远不要使用
split()
-尽管它的名称无害,但它已被弃用并使用posix regexps。如果您想使用正则表达式进行拆分,请使用
preg_split
,否则使用
explode
@neowerk:除了“但是我想要!!!”之外,还有什么原因吗?regexp不是分割路径段的首选方法;但是它们可以从单个段提取数据。是的,就是这样!非常感谢!我猜
$url[0]
将是一个空字符串,因为前导斜杠。
$url[0]
将是一个空字符串
在OP中使用url。可能添加
trim
ltrim
。例如
$url=explode('/',trim($url,'/'))
谢谢你的帮助和详细的解释。我不擅长正则表达式。当使用
作为分隔符时,你不必避开前斜杠。@ThiefMaster啊,是的,我最初发布的分隔符是
/
,现在更新了。@neowerk on stackoverflow通过向上投票任何有用的答案和acc来表示感谢这是最有用的答案。
$str1='/catalog/category-1';
$str2='/catalog/category-1/filter/value';

preg_match('#/[^/]*/[^/]*#',$str1,$match);
echo $match[0].;

preg_match('#/[^/]*/[^/]*#',$str2,$match);
echo $match[0];
/catalog/category-1
/catalog/category-1
/      # Match first /
[^/]*  # Match anything not a /
/      # Match second /
[^/]*  # Match anything not a /