Può funzione preg_match () (o altra funzione regex php) corrisponde un numero variabile di subpattern tra parentesi?
-
18-09-2019 - |
Domanda
Supponiamo che io sono '/srv/www/site.com/htdocs/system/application/views/'
e voglio testarlo contro un'espressione regolare che corrisponde ciascun nome di directory nel percorso?
Qualcosa come questo modello: '(/[^/])'
Che produce un array con 'srv','www','site.com'...
etc.
PS:. La sintassi regexp che ho scritto è solo per illustrare, non è testato e sicuramente sbagliato, ma solo per dare un'idea
PS2:. So che c'è explode()
ma vediamo se possiamo fare questo con un regexp (è utile per altre lingue e quadri che non hanno esplodere)
Soluzione
$str = '/srv/www/site.com/htdocs/system/application/views/';
preg_match_all('/\/([^\/]+)/', $str, $matches);
// $matches[0] contains matching strings
// $matches[1] contains first subgroup matches
print_r($matches[1]);
Output:
Array
(
[0] => srv
[1] => www
[2] => site.com
[3] => htdocs
[4] => system
[5] => application
[6] => views
)
Altri suggerimenti
C'è preg_split
per dividere i file sulle espressioni regolari simile ad esplodere, e quindi non v'è preg_match_al
l che fa quello che si vuole.
Non credo che si può, ma si potrebbe invece utilizzare preg_match_all () per ottenere più corrispondenze da un'espressione regolare. C'è anche preg_split () che può essere più appropriato.