Può funzione preg_match () (o altra funzione regex php) corrisponde un numero variabile di subpattern tra parentesi?

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

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

È stato utile?

Soluzione

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

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

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