Guida di espressione regolare richiesta per ottenere il nome del file dal percorso

StackOverflow https://stackoverflow.com//questions/21045652

  •  21-12-2019
  •  | 
  •  

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.

È stato utile?

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

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top