Требуется справка по регулярным выражениям для получения имени файла по пути
Вопрос
У меня есть следующие требования.
У меня есть URL-адрес в формате
/content/any-site-name(alphanumeric)/filename.css
Это всегда начинается с /content
и каталог может быть любым и может быть любой глубины.Расширение файла всегда будет .css
.
Необходимо написать регулярное выражение, чтобы получить следующий путь из введенного пути
/content/sitename/filename.css
Спасибо за вашу помощь.
Решение
если вы пытаетесь пойти от этого:
/content/folder1/folder2/sitename/filename.css
к этому:
/content/sitename/filename.css
и предполагая, что фактическое слово «контент» никогда не меняется, вы можете попробовать:
/\/content(\/[A-Za-z0-9]+)(?:[\/][^.]*)*([\/][a-zA-Z0-9]+.css)/
результаты сопоставления будут $1:"/sitename" и $2:«/filename.css», а затем, чтобы получить нужную строку, вы просто складываете нужные части вместе:mystring = "/content" + $1 + $2
Другие советы
Вы можете использовать следующее регулярное выражение:
/content(/[a-zA-Z0-9]+)*/[a-zA-Z0-9]+[.]css
Вот что вы ищете, если я понял:
/\/content\/mysite\/(?:[\w-]+\/)*([\w-]+\.css)/
Работает на :
/content/mysite/filename.css
/content/mysite/folder1/filename.css
/content/mysite/folder1/folder2/filename.css
/content/mysite/folder1/folder2/folder3/filename.css
- и так далее...
Проверьте это регулярное выражение онлайн
Образец заявления (php) :
function getShortPath($url) {
return preg_replace('/\/content\/mysite\/(?:[\w-]+\/)*([\w-]+\.css)/', '/content/mysite/$1', $url);
}
echo getShortPath('/content/mysite/filename.css').'<br>';
echo getShortPath('/content/mysite/folder1/filename.css').'<br>';
echo getShortPath('/content/mysite/folder1/folder2/filename.css').'<br>';
echo getShortPath('/content/mysite/folder1/folder2/folder3/filename.css').'<br>';
/*
/content/mysite/filename.css
/content/mysite/filename.css
/content/mysite/filename.css
/content/mysite/filename.css
*/
Примечание :вы можете улучшить это регулярное выражение, назвав группы захвата:
/\/content\/(?<sitename>[\w-]+)(?<path>\/(?:[\w-]+\/)*)(?<filename>[\w-]+\.css)/
Тогда вы получите в результате:
/content/mysite/filename.css
:
{ sitename: "mysite", path: "/", filename: "filename.css" }
/content/mysite/folder1/folder2/filename.css
:
{ sitename: "mysite", path: "/folder1/folder2/", filename: "filename.css" }