Alcune soluzioni:
(1) Se la regex è scritta dall'utente (non dall'utente) e raramente cambia, perché creare qualcosa a livello di programmazione? Potresti semplicemente creare alcuni bei esempi a mano.
(2) Utilizzare una soluzione pronta. (vedi altre risposte)
(3) Rejection sampling, la soluzione a tutti i problemi di generazione casuale: creare una stringa casuale e verificare se corrisponde alla regex. In caso contrario, riprova. Se la regex è molto specifica, tuttavia questa soluzione ha prestazioni terribili.
(4) Implementare un parser che trasformi una regex in un albero di costruzione stringa costituito ad es. dei nodi qui sotto. Ogni nodo ha un metodo CreateRandomString
che segue determinate regole. Creare una stringa casuale significa chiamare quel metodo per il nodo radice.
concatenazione: Traverse tutte le sottostrutture del bambino e concatenare i risultati in ordine.
scelta casuale: selezionare un sottoalbero secondario casuale e attraversarlo. Restituisce il risultato.
moltiplicazione: creare un numero casuale n tra aeb. Attraversa il sottogruppo n volte e concatena i risultati.
leaf: Restituisce una stringa costante.
Creare il parser è la parte difficile :), soprattutto le strutture nidificate. (Ho scritto una per una sintassi simile a regex.)
fonte
2013-07-08 12:15:15
vi suggerisco di guardare in: http://research.microsoft.com/en-us/projects/rex/, fanno una cosa del genere. fammi sapere se funziona per te –
Dai un'occhiata a questo sito web: http://debuggex.com. Inserisci qualsiasi espressione regolare che vuoi quindi dare un'occhiata alla sezione 'Alcune partite casuali '. Potresti essere sorpreso dalle proposizioni fatte quando la tua espressione regolare inizia a essere complicata. – Stephan
Cosa potrebbe essere generato da '. *'? – Toto