Требуется справка по регулярным выражениям для получения имени файла по пути

StackOverflow https://stackoverflow.com//questions/21045652

  •  21-12-2019
  •  | 
  •  

Вопрос

У меня есть следующие требования.
У меня есть 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

Regular expression in details

Вот что вы ищете, если я понял:

/\/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
  • и так далее...

enter image description here

Проверьте это регулярное выражение онлайн

Образец заявления () :

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" }

Проверьте это регулярное выражение онлайн

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top