URI ayıklamak için normal ifade

4 Cevap php

Ben URI'lerinin iki tip ayıklamak için normal bir ifade gerekir

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

Temel olarak, her iki durumda da ben bir şekilde izole ve dönüş gerekir

/path/to

ve

?filter

That is, both /path/to ve filter is arbitrary. So I suppose I need 2 regular expressions for this? I am doing this in PHP but if someone could help me out with the regular expressions I can figure out the rest. Thanks for your time :)

EDIT: Yani sadece clearify isterseniz örneğin

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

I want to get /help/faq ve ?sort=latest

Başka bir örnek

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

I want to get /site/users/all ve ?filter=none&status=2. Note that I do not want to get the page!

4 Cevap

parse_url daha kolay olması ve daha sonra regex daha az yan etkileri olabilir kullanma:

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

Daha sonra ilk iki parça almak için yolda patlayabilir kullanabilirsiniz:

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

Bu deneyin:

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

Bu size ilk iki URL yolu segmentleri ve sorgu alacak.

test değil:

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

http ve yolu ile veya olmadan https url eşleşmesi gereken, ikinci argüman uymalıdır kadar? (Örneğin? Filtreden) ve. * \ N dışında herhangi bir karakter.

Eğer explode() yerine (http://nl2.php.net/manual/en/function.explode.php) kullanarak düşündünüz mü? Görev bunun için yeterince basit görünüyor. Sen 2 aramaları (/ için bir ve için? Bir) gerekir ama bu kez yaptım oldukça basit olmalıdır.