Avete mai pensato di usare le espressioni regolari
al contrario?
Voglio dire, non usarle come
riconoscitori di stringhe ma come
generatori.
Beh, a me la cosa ossessionava da un po' di tempo. La fregatura é che per fare una semplice prova bisogna riscrivere il parser delle espressioni regolari da zero, dato che nessun motore regex che io conosca espone il parser in maniera semplice.
Passata la paura ho usato
The Gardens Point Parser Generator, un emulo di YACC per C#, ho rubato una grammatica già fatta da
qui, l'ho estesa un po' ed é saltato fuori
rexgen.
C:\tmp>rexgen "(a+b*[0-9])+"
abbbbbbb4aaaaabbbbbbbbbb6aaaaaabbb1abbb6aaaabbbbbbbbb6
C:\tmp>
Attualmente supporta concatenamento (ovviamente), raggruppamento (
(...)) quantificatori (
+,
* e
?), range (
[...]) positivi e negati (
[^...]) ed il metacarattere
., oltre naturalmente all'escaping per i caratteri speciali (
()[]\.+*?) e non stampabili (
\a\b\f\n\r\t\v).
Il codice é parecchio brutto, ma se lo volete davvero vedere lo trovate
qui.
Le ripetizioni indotte dai quantificatori
* e
+ sono arbitrariamente limitate ad un massimo di 10. Specificate semplicemente l'espressione regolare come (unico) parametro della linea di comando, senza dimenticare di usare le virgolette se utilizzate
| o degli spazi