stranger1902 ha scritto:
mi servirebbe una regex che mi permette, ricorsivamente, di selezionare solamente le sottostringhe comprese tra 2 parentesi tonde di cui la prima parentesi è preceduta dal carattere speciale $.
In altre parole, vorrei che la regex estraesse solamente le sottostringhe:
"$( $( $( ...qualcosa... ) ...qualcos'altro... ) qualcos'altro ancora)" e "$( ...qualcosa... )"
La questione che vedo io è che la forma $( ..... ) può essere "
annidata". Gestire questo con le regex è molto complesso (se non impossibile). Le regex non hanno alcun supporto implicito per questo, né "sanno" certamente contare i livelli di annidamento delle occorrenze.
La soluzione probabilmente migliore sarebbe analizzare la stringa usando il concetto classico di "stack". Basta andare avanti a cercare solo 2 cose: "$(" oppure ")" (e non servirebbero nemmeno le regex per questo). Quando trovi "$(" incrementi una variabile di
livello, quando incontri ")" la decrementi.
"bla $(esempio) bla $(ciao $(prova) ciao)"
00001111111111000001111111222222221111110
Ora: puoi decidere pure se considerare e prendere solo le sottostringhe a livello 1 (quindi solo "$(esempio)" e "$(ciao $(prova) ciao)" oppure catturare
anche le sottostringhe ai livelli più interni (anche "$(prova)"). A tua scelta ....