Guida di espressione regolare richiesta per ottenere il nome del file dal percorso
Domanda
Ho i seguenti requisiti.
Ho l'URL in formato
/content/any-site-name(alphanumeric)/filename.css
.
Inizia sempre con /content
e la directory può essere qualsiasi cosa e potrebbe essere una directory profonda.L'estensione del file sarà sempre .css
.
Hai bisogno di scrivere un'espressione regolare per ottenere il seguente percorso fuori dal percorso inserito
/content/sitename/filename.css
.
Grazie per il tuo aiuto.
Soluzione
Se stai cercando di andare da questo:
/content/folder1/folder2/sitename/filename.css
.
A questo:
/content/sitename/filename.css
.
e supponendo che la parola effettiva "contenuto" non cambia mai, potresti provare:
/\/content(\/[A-Za-z0-9]+)(?:[\/][^.]*)*([\/][a-zA-Z0-9]+.css)/
.
I risultati della partita saranno $ 1: "/ Sitename" e $ 2: "/FileName.CSS" e quindi per ottenere la stringa desiderata aggiungi semplicemente le parti che si desidera insieme: mystring="/ content" + $ 1 + $ 2
Altri suggerimenti
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" }