2010-02-26 71 views
1

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

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

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

/path/to 

?filter 

也就是说,/path/tofilter都是任意的。所以我想我需要这个正则表达式?我在PHP中这样做,但如果有人可以帮助我与正则表达式我可以找出其余的。感谢您的时间:)

编辑:所以只想clearify,例如,如果

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

+0

你只想返回前两个目录(“路径”和“到”)?还有什么可以“过滤”是什么?它也可以是“?foo”或“?foo = 123”或“?foo = bar”? – stmax 2010-02-26 23:08:42

+0

第二场比赛是否总是以问号开始? – 2010-02-26 23:10:37

+0

你的意思是你需要捕获'/ path/to'?你需要捕获路径的前两个元素? – 2010-02-26 23:11:54

回答

4

使用parse_url可能会更容易,并有较少的副作用则正则表达式:

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

然后,您可以使用爆炸的道路上率先拿到两个部分:

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

不错的提示 - 谢谢:) – 2010-02-26 23:28:16

+0

+1使用内置的功能,而不是正则表达式。 :) – mlsteeves 2010-02-27 00:19:00

0

试试这个:

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

这将让你的前两个URL路径段和查询。

0

未经测试,但:

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

应符合HTTP和HTTPS带或不带路径的URL,第二个参数应该匹配,直到〜 (例如?过滤器)和。*除\ n之外的任何字符。