Peut preg_match () (ou autre fonction php regex) correspondent à un nombre variable de parenthesized sous-modèles?
-
18-09-2019 - |
Question
Supposons que je '/srv/www/site.com/htdocs/system/application/views/'
et que vous souhaitez tester contre une expression rationnelle qui correspond à chaque nom de répertoire dans le chemin?
Quelque chose comme ce modèle: '(/[^/])'
Cela donne un tableau avec 'srv','www','site.com'...
etc.
PS:. La syntaxe regexp je l'ai écrit est juste pour illustrer, ce n'est pas testé et sûrement pas, mais juste pour donner une idée
PS2. Je sais qu'il ya explode()
, mais nous allons voir si nous pouvons le faire avec une expression rationnelle (il est utile pour d'autres langues et des cadres qui ne l'ont pas explosé)
La solution
$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]);
Sortie:
Array
(
[0] => srv
[1] => www
[2] => site.com
[3] => htdocs
[4] => system
[5] => application
[6] => views
)
Autres conseils
Il est preg_split
pour les fichiers de fractionnement sur des expressions régulières semblable à exploser, et puis il y a preg_match_al
l qui Est-ce que ce que vous voulez.
Je ne pense pas que vous pouvez, mais vous pouvez utiliser à la place preg_match_all () pour obtenir plusieurs matchs de une expression régulière. Il y a aussi preg_split () qui peut être plus approprié.