Peut preg_match () (ou autre fonction php regex) correspondent à un nombre variable de parenthesized sous-modèles?

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

  •  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é)

Était-ce utile?

La solution

preg_match_all :

$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_all 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é.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top