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