2014-01-10 2 views
0

У меня следующие требования.
У меня есть URL-адрес в форматеРегулярное выражение Справка Требуется для получения имени файла из пути

/content/any-site-name(alphanumeric)/filename.css 

Он всегда начинается с /content и каталог может быть что угодно, и может быть любой каталог, в глубину. Расширение файла всегда будет .css.

Нужно написать регулярное выражение, чтобы получить следующий путь из введенного пути

/content/sitename/filename.css 

Спасибо за вашу помощь.

+1

Какая разница между 'любой МЕСТЕ-name' и 'sitename'? – zessx

+0

Не могли бы вы показать нам настоящие примеры? – Toto

+0

@zessx Позвольте мне снова повторить утверждение проблемы. Что входит в выражение, это путь, например, /content/mysite/folder1/folder2/filename.css или /content/mysite/filename.css или /content/mysite/folder1/filename.css. Из выражения следует вывести путь /content/mysite/filename.css и не должен показывать остальную часть пути между папками между mysite и filename.css. Не могли бы вы помочь мне в этом. Заранее спасибо :) – TechNiks

ответ

0

если вы пытаетесь перейти из этого:

/content/folder1/folder2/sitename/filename.css 

к этому:

/content/sitename/filename.css 

и ssuming фактического слова «содержание» никогда не меняется, вы можете попробовать:

/\/content(\/[A-Za-z0-9]+)(?:[\/][^.]*)*([\/][a-zA-Z0-9]+.css)/  

результаты матча составят $ 1: «/ имя_сайт», и $ 2: «/filename.css», а затем, чтобы получить нужную строку, которую вы просто добавить детали, которые вы хотите вместе: MyString = "/ содержание" + $ 1 + $ 2

+0

Позвольте мне снова повторить утверждение проблемы. Что входит в выражение, это путь, например, /content/mysite/folder1/folder2/filename.css или /content/mysite/filename.css или /content/mysite/folder1/filename.css. Из выражения следует вывести путь /content/mysite/filename.css и не должен показывать остальную часть пути между папками между mysite и filename.css. Не могли бы вы помочь мне в этом. Спасибо заранее – TechNiks

+0

Спасибо. Именно это и требовалось. :) – TechNiks

1

Вы можете использовать следующее регулярное выражение:

/content(/[a-zA-Z0-9]+)*/[a-zA-Z0-9]+[.]css 

Regular expression in details

+0

Спасибо за помощь, но позвольте мне снова повторить заявление о проблеме. То, что входит в выражение, - это путь e.g /content/sitename/folder1/folder2/filename.css или /content/sitename/filename.css или /content/sitename/folder1/filename.css. Из выражения следует вывести путь /content/sitename/filename.css. Текущее выражение соответствует любому пути, который мы вставляем. Не могли бы вы помочь мне в этом. Спасибо заранее – TechNiks

+0

@TechNiks: Я не понял вашу проблему. Можете ли вы обновить свой вопрос с помощью желаемого ввода и вывода? –

0

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

/\/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

Test this regex online

Пример приложения ():

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

Test this regex online

+0

Этот метод группы захвата замечательный. На самом деле часть mysite также должна быть различной, но вам нужно многому научиться из вашего решения reg ex. Спасибо за тонну за помощь :) – TechNiks

Смежные вопросы