正则表达式从URI中提取

时间:2010-02-26 23:04:22

标签: php regex

我需要一个正则表达式来从两种类型的URI中提取

http://example.com/path/to/page/?filter
http://example.com/path/to/?filter

基本上,在这两种情况下,我都需要以某种方式隔离并返回

/path/to

?filter

也就是说,/path/tofilter都是任意的。所以我想我需要 2 正则表达式?我在PHP中这样做,但如果有人可以帮我解决正则表达式,我可以弄清楚其余的。谢谢你的时间:))

编辑:所以只想清除,例如

http://example.com/help/faq/?sort=latest

我想获得/help/faq?sort=latest

另一个例子

http://example.com/site/users/all/page/?filter=none&status=2

我想获得/site/users/all?filter=none&status=2。请注意,我不想获得page

4 个答案:

答案 0 :(得分:4)

使用parse_url可能会比正则表达式更容易并且副作用更少:

$querystring = parse_url($url, PHP_URL_QUERY); 
$path = parse_url($var, PHP_URL_PATH);

然后,您可以在路径上使用explode来获取前两个段:

$segments = explode("/", $path);

答案 1 :(得分:0)

试试这个:

^http://[^/?#]+/([^/?#]+/[^/?#]+)[^?#]*\?([^#]*)

这将为您提供前两个URL路径段和查询。

答案 2 :(得分:0)

未经测试但是:

^https?://[^ /]+[^ ?]+.*

哪个匹配http和https url有或没有路径,第二个参数应匹配,直到? (例如来自?过滤器)和。*除了\ n。

之外的任何字符

答案 3 :(得分:0)

您是否考虑过使用explode()代替http://nl2.php.net/manual/en/function.explode.php)?这项任务看起来很简单。你需要2个电话(一个用于/和一个用于?)但是一旦你这样做就应该很简单。