1


1

URIから抽出する正規表現

2種類のURIから抽出する正規表現が必要です

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

基本的に、両方のケースで私は何らかの形で隔離して返す必要があります

/path/to

and

?filter

つまり、 / path / to`と filter`の両方は任意です。 だから私はこれのために* 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`を取得したい。 「ページ」を取得したくないことに注意してください!

4 Answer


4


parse_urlを使用すると、正規表現よりも簡単で副作用が少なくなる場合があります。

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

その後、パスでexplodeを使用して、最初の2つのセグメントを取得できます。

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


0


これを試して:

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

これにより、最初の2つのURLパスセグメントとクエリが取得されます。


0


テストされていませんが:

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

これは、パスの有無に関係なくhttpおよびhttps urlと一致する必要があり、2番目の引数は? (たとえば?filterから)および。* \ n以外の任意の文字。


0


代わりに explode()(http://nl2.php.net/manual/en/function.explode.php)を使用することを検討しましたか? タスクはそれで十分簡単に​​思えます。 2つの呼び出しが必要になります(1つは/に、もう1つは?に1つ)が、それを行うと非常に簡単になります。