voglio essere in grado di analizzare i percorsi dei file come questo:espressioni regolari per abbinare un numero illimitato di opzioni
/var/www/index.(htm|html|php|shtml)
in un array ordinato:
array("htm", "html", "php", "shtml")
e poi produrre un elenco di alternative :
/var/www/index.htm
/var/www/index.html
/var/www/index.php
/var/www/index.shtml
In questo momento, mi hai dichiarazioni preg_match
che può dividere due alternative:
preg_match_all ("/\(([^)]*)\|([^)]*)\)/", $path_resource, $matches);
Qualcuno potrebbe darmi un puntatore come estendere questo per accettare un illimitato numero di alternative (almeno due)? Per quanto riguarda l'espressione regolare, il resto posso occuparmi.
La regola è:
L'elenco deve iniziare con un
(
e chiudere con un)
Ci deve essere uno
|
nella lista (cioè almeno due alternative)Qualsiasi altro evento (i) di
(
o)
non deve essere toccato.
Aggiornamento: ho bisogno di essere in grado di affrontare anche con più coppie di parentesi come ad esempio:
/var/(www|www2)/index.(htm|html|php|shtml)
dispiace non ho detto che subito.
Aggiornamento 2: Se stai cercando di fare quello che sto cercando di fare nel filesystem, quindi notare che glob() porta già questa funzionalità out of the box. Non è necessario implementare un controllo personalizzato. Vedi @ risposta di Gordon sotto per i dettagli.
Perché l'inferno è tutti * * ossessionato ** con regex? Basta usare un diverso metodo maledetto. Abbinare tutto dopo una parentesi è ** non difficile ** senza regex. –
@Coronatus mi mostra un elegante, leggero metodo non regex che può 1. gestire coppie multiple di parentesi e 2. ignorare qualsiasi coppia di parentesi che non contenga '|', e non sembra merda, e io ' ti attirò volentieri il mio cappello. –
Fatto. Vedi la mia risposta. –