2010-02-26 68 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之外的任何字符。