我有以下要求。
我有网址的格式正则表达式帮助从路径获取文件名需要
/content/any-site-name(alphanumeric)/filename.css
它总是/content
开始,该目录可以是任何东西,可以是任何深目录。文件扩展名将始终为.css
。
需要编写一个正则表达式来获取以下路径进行输入的路径
/content/sitename/filename.css
感谢您的帮助。
我有以下要求。
我有网址的格式正则表达式帮助从路径获取文件名需要
/content/any-site-name(alphanumeric)/filename.css
它总是/content
开始,该目录可以是任何东西,可以是任何深目录。文件扩展名将始终为.css
。
需要编写一个正则表达式来获取以下路径进行输入的路径
/content/sitename/filename.css
感谢您的帮助。
,如果你想从这个去:
/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
您可以使用下面的正则表达式:
/content(/[a-zA-Z0-9]+)*/[a-zA-Z0-9]+[.]css
感谢您的帮助,但让我再次迭代问题陈述。表达式中包含一个路径,例如/content/sitename/folder1/folder2/filename.css或/content/sitename/filename.css或/content/sitename/folder1/filename.css。表达式应该包含一个路径/content/sitename/filename.css。当前的表达式匹配我们放入的任何路径。请帮助我。在此先感谢:) – TechNiks
@TechNiks:我不明白你的问题。你能用你想要的输入和输出来更新你的问题吗? –
这里就是你要找的东西,如果我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
示例应用程序(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" }
这个捕获组方法很好。其实mysite部分也必须有所不同,但要从你的reg ex解决方案中学到很多东西。谢谢你的帮助:) – TechNiks
什么是任何现场-name'之间'的区别和“sitename”? – zessx
你能向我们展示一些真实的例子吗? – Toto
@zessx让我再次遍历问题陈述。表达式中包含一个路径,例如/content/mysite/folder1/folder2/filename.css或/content/mysite/filename.css或/content/mysite/folder1/filename.css。表达式应该包含一个路径/content/mysite/filename.css,并且不应该显示mysite和filename.css之间的文件夹路径的其余部分。你能帮我解决这个问题吗?在此先感谢:) – TechNiks