Ciao a tutti.
Sto diventando matto perchè probabilmente non sto usando nel modo giusto le regular expression.
Ho una stringa fatta in questo modo:
"abc-abc-abc-"
dove identifichiamo
'abc-' col nome di gruppo
'abc' col nome di info
'-' col nome di divisore
1) possono esserci n gruppi ("abc-abc-abc-abc-abc-"
2) info ha lunghezza variabile ('a' oppure 'aa' oppure 'abccabc') ma sempre formato da 'a' 'b' 'c'
2) il divisore può essere differente per ogni gruppo e più lungo di un carattere ma mai composto da 'a' 'b' 'c' (abc.abc:::abc//)
Il mio compito è mettore tutti i divisori in un array, quindi:
abc.abc:::abc// ==> array('.',':::','//')
La mia domanda è, posso farlo con preg match e una singola regexp??
per ora sono arrivato a questo:
codice:
$str = "abc/abc-abc:";
$reg = "/[abc]+([^abc]+)/";
preg_match($reg, $str, $result);
dove $result è:
codice:
array("abc/", "/")
in pratica riesco a prendere il primo divisore. Così ho pensato di aggiungere alla regexp la ricerca della precedente condizione n volte (+):
codice:
$reg = "/([abc]+([^abc]+))+/";
ma il risultato è:
codice:
array("abc/abc-abc:", "abc:", ":")
ovvero prende solo l'ultimo valore. Pensavo che preg_match riportasse tutti i match e non solo l'ultimo incontrato. Dove sbaglio? E' possibile fargli ritornare tutti i divisori.
Un'ulteriore prova che ho fatto è stata modificare la stringa di ingresso così:
"abc/abc-abc"
ed ancora mi da solo l'ultimo divisore (-)...
qualcuno sa spiegarmi?
potrei risolverlo con un ciclo eliminando tutte le volte il gruppo iniziale o finale, ma a sto punto lo farei senza regexp...
Ringrazio in anticipo per eventuali spiegazioni, vorrei chiarirmi una volta per tutte il concetto di matching
Ciao
Yuri