パスからファイル名を取得するために必要な正規表現ヘルプ
質問
私は以下の要件を持っています。
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="/コンテンツ" + $ 1 + $ 2
他のヒント
You can use the following regular expression :
/content(/[a-zA-Z0-9]+)*/[a-zA-Z0-9]+[.]css
Here's what you're looking for, if I undersood :
/\/content\/mysite\/(?:[\w-]+\/)*([\w-]+\.css)/
Works for :
/content/mysite/filename.css
/content/mysite/folder1/filename.css
/content/mysite/folder1/folder2/filename.css
/content/mysite/folder1/folder2/folder3/filename.css
- and so on...
Sample application (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
*/
Note : you can improve this regex, by naming capturing groups :
/\/content\/(?<sitename>[\w-]+)(?<path>\/(?:[\w-]+\/)*)(?<filename>[\w-]+\.css)/
Then you'll have, as results :
/content/mysite/filename.css
:
{ sitename: "mysite", path: "/", filename: "filename.css" }
/content/mysite/folder1/folder2/filename.css
:
{ sitename: "mysite", path: "/folder1/folder2/", filename: "filename.css" }
所属していません StackOverflow