Kann eine variable Anzahl von klammerten Subpattern preg_match () (oder anderer PHP-Regex-Funktion) überein?

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

  •  18-09-2019
  •  | 
  •  

Frage

Angenommen, ich habe '/srv/www/site.com/htdocs/system/application/views/' und will es gegen einen regulären Ausdruck zu testen, die jeden Verzeichnisnamen im Pfad entspricht?

Etwas wie dieses Muster: '(/[^/])'
Das ergibt einen Array mit 'srv','www','site.com'... etc.

PS:. Die regexp-Syntax Ich schrieb nur zu illustrieren, ist es nicht getestet und sicher falsch, aber nur eine Idee zu geben

PS2. Ich weiß, dass es explode() aber mal sehen, ob wir dies mit einem regexp tun können (es ist nützlich für andere Sprachen und Frameworks, die explodieren nicht haben)

War es hilfreich?

Lösung

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]);

Ausgabe:

Array
(
    [0] => srv
    [1] => www
    [2] => site.com
    [3] => htdocs
    [4] => system
    [5] => application
    [6] => views
)

Andere Tipps

Es gibt preg_split zum Spalten von Dateien auf regulären Ausdrücken ähnlich zu explodieren, und dann gibt es preg_match_all die das macht, was Sie wollen.

Ich glaube nicht, Sie können, aber Sie könnten stattdessen preg_match_all () von mehreren Übereinstimmungen zu erhalten ein regulärer Ausdruck. Es gibt auch preg_split () , die besser geeignet sein kann.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top