Как получить последний сегмент URL с помощью регулярных выражений - PullRequest
9 голосов
/ 10 января 2012

У меня есть URL:

www.domain.com/first/second/last/

Как получить последний термин между слешами?то есть last с использованием регулярных выражений?

Обратите внимание, что URL может быть просто:

www.domain.com/last/ 

Или:

www.domain.com/first/second/third/fourth/last/

Мне нужно извлечь этот последний терминдля использования в модуле переписывания запросов Zeus Server, который использует PERL и REGEX.

Обновление

После реализации некоторых ответов я только что понял, что мне нужно, чтобы это совпадение было сделано только для URL вопределенный каталог.

т.е.

www.domain.com/directory/first/second/last/ 

должен возвращать last.Принимая во внимание, что:

www.domain.com/first/second/last/ 

не должно возвращать совпадение.

Ответы [ 4 ]

20 голосов
/ 10 января 2012

Вот простое регулярное выражение:

[^/]+(?=/$|$)

Должно совпадать с тем, что вы в него бросаете.


Если вы хотите посмотреть в определенном каталоге, используйте это:

/directory.*/([^/]+)/?$

и ваш результат будет в первой группе захвата.

4 голосов
/ 10 января 2012

Это регулярное выражение (слегка измененная версия ответа Джозефа) должно дать вам последний сегмент, минус конечный слеш.

([^/]+)/?$

Ваш результат будет первой группой захвата.

1 голос
/ 10 января 2012

Это должно сработать:

[^/]+(?=/$|$)

С (?=lookahead) вы не получите последний слэш.

[^/]+ Ищет хотя бы один символ, который не является косой чертой (как можно больше). (?=/?^|^) гарантирует, что следующая часть строки - это /, а затем конец строки или просто конец строки.

Соответствует match in /one/two/match, '/one/two/match/'.

0 голосов
/ 10 января 2012

Последний слеш может быть необязательным. Правильно?

Как насчет этого:

$url =~ m|([^/]+)/?$|;
my $end_of_url = $1;

$ в конце привязывает регулярное выражение к концу строки. [^/] означает все, что не является косой чертой, а + означает, что я хочу одну или несколько вещей, которые не являются косыми чертами. Обратите внимание, что это группа захвата, помеченная круглыми скобками.

Я заканчиваю регулярное выражение /?, что означает, что в самом конце строки может быть или не быть косой черты. Я поместил свое регулярное выражение между m| и |, чтобы я мог использовать косые черты без необходимости постоянно избегать их.

Последняя часть URL теперь находится в $1, и я могу установить собственную скалярную переменную для сохранения этого результата.

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