Регулярное выражение для извлечения из URI - PullRequest
1 голос
/ 27 февраля 2010

Мне нужно регулярное выражение для извлечения из двух типов URI

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

В принципе, в обоих случаях мне нужно как-то изолировать и вернуть

/path/to

и

?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. Обратите внимание, что я не хочу получать page!

Ответы [ 4 ]

4 голосов
/ 27 февраля 2010

Использование parse_url может быть проще и иметь меньше побочных эффектов, чем регулярное выражение:

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

Затем вы можете использовать разнесение по пути, чтобы получить первые два сегмента:

$segments = explode("/", $path);
0 голосов
/ 27 февраля 2010

не проверено, но:

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

который должен совпадать с http и https url с или без пути, второй аргумент должен совпадать до? (например, из фильтра?) и. * любой символ, кроме \ n.

0 голосов
/ 27 февраля 2010

Рассматривали ли вы вместо этого explode() (http://nl2.php.net/manual/en/function.explode.php)? Задача кажется достаточно простой для этого. Вам понадобится 2 вызова (один для / и один для?), Но он должен быть довольно простым один раз ты сделал это.

0 голосов
/ 27 февраля 2010

Попробуйте это:

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

Это даст вам первые два сегмента пути URL и запрос.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...