パスからファイル名を取得するために必要な正規表現ヘルプ

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="/コンテンツ" + $ 1 + $ 2

他のヒント

You can use the following regular expression :

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

Regular expression in details

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...

enter image description here

Test this regex online

Sample application () :

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

Test this regex online

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top