2014-01-10 32 views
0

我有以下要求。
我有网址的格式正则表达式帮助从路径获取文件名需要

/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 

和a 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

感谢您的帮助,但让我再次迭代问题陈述。表达式中包含一个路径,例如/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