Regexp, чтобы удалить последний символ в строке URL, только если он равен / - PullRequest
0 голосов
/ 01 марта 2020

Цель состоит в том, чтобы в основном получить совпадение в строке URL, чтобы дать нам полный URL до последней родительской папки. Так, например, если бы мы имели:

https://www.example.com/folder1/folder2/folder3/folder4, это дало бы нам https://www.example.com/folder1/folder2/folder3.

Тот же самый результат должен произойти, если у нас был / в конце, как это:

https://www.example.com/folder1/folder2/folder3/folder4/

Я думаю, что это регулярное выражение (/*.*/|$) дает нам URL до последний /, поэтому он не работает, если URL заканчивается на /.

Если бы у нас было: https://www.example.com/folder1/folder2/folder3/folder4/index.php.

Возвращалось бы https://www.example.com/folder1/folder2/folder3/folder4.

Таким образом, до последней родительской папки другой папки или файла. Обратите внимание, что решение должно работать с любым URL, а не с указанным c в этом вопросе.

Ответы [ 2 ]

0 голосов
/ 01 марта 2020

Можно использовать

/.*[^\/]/

для извлечения строки

"https://www.example.com/folder1/folder2/folder3/folder4" 

из

"https://www.example.com/folder1/folder2/folder3/folder4/"

В отличие от этого, это регулярное выражение извлекает всю строку из строк

"https://www.example.com/folder2/folder3/folder4/index.php"

и

"https://www.example.com/folder1/folder2/folder3/folder4"

Обратите внимание, что поскольку регулярные выражения по умолчанию жадные , привязки не нужны. В этом примере .* в регулярном выражении будет соответствовать всем, кроме последнего форварда sla sh, опять же, потому что он жадный.

В качестве альтернативы можно использовать метод, который преобразует последний символ строки в пустая строка, если это "/", возвращающая новую строку, оставляя исходную строку без изменений. Регулярное выражение

/\/\z/

может использоваться для идентификации этого символа, если он присутствует. В Ruby можно написать:

str = "https://www.example.com/folder1/folder2/folder3/folder4/"
str.sub(/\/\z/, '')
  #=> "https://www.example.com/folder1/folder2/folder3/folder4" 

Мы можем подтвердить, что исходная строка не была затронута:

str
  #=> "https://www.example.com/folder1/folder2/folder3/folder4/"
0 голосов
/ 01 марта 2020

Это может решить это. Любое выражение, заканчивающееся "/", за которым следует строка без "/"

^(.+\/)[^\/]+$
...