2010-05-25 13 views
11

In uno dei podcast StackOverflow (quello in cui i ragazzi discutevano della generazione di dati per il test di DB - #11 o #12), Jeff menzionava qualcosa come "espressioni regolari inverse", che sono usate esattamente per questo scopo: data una regex, produrre una stringa che alla fine corrisponderà alla regex.Reverse di espressioni regolari per generare dati

Qual è il termine corretto per questo concetto completo? È un concetto ben noto?

+3

Ulteriori informazioni su questo: http://stackoverflow.com/questions/205411/random-string-that-matches-a-regexp – miku

+0

http://www.texamples.com/how-to-generate-random-passwords -in-java/questo potrebbe aiutarti. – brainless

risposta

0

Non esiste una "espressione regolare inversa". Un'espressione regolare è proprio questa: un'espressione. Esprime una lingua , che consiste in un insieme (eventualmente infinito) di stringhe.

Lo storno è nel uso dell'espressione: dove viene comunemente utilizzato per segnalare se una stringa è nella lingua, ora viene utilizzata per produrre stringhe nella lingua.

4

Abstract: Recursive transition network (con la postmodernism generator come un esempio interessante)

Una specializzazione sarebbe la "regex inversa".


Quanto alla terminologia: A espressione regolare è una forma di grammatica che descrive tutte le parole appartenente a una determinata linguaggio regolare (cioè tutti gli ingressi abbinato dall'espressione).

Pertanto si potrebbe chiamare la tua domanda: "Come può creare una parola a caso corrispondente a un dato regex" o "Come posso ottenere una parola a caso appartenente ad una lingua regolare specificata".

+0

Una grammatica context free (CFG) non è regolare, come si può dimostrare usando il lemma di pompaggio. Tuttavia, l'idea di un RTN può ancora essere applicata, utilizzando invece un automa allo stato finito non deterministico (NFA). – Thomas

+1

@Thomas: Sì, ma uno regolare è privo di contesto, quindi è possibile applicare lo stesso concetto (non essendo altro che una specializzazione). – Dario

+0

Ah, ovviamente, hai ragione. – Thomas

5

Il modulo Perl String::Random (nel CPAN) esegue questa operazione. Prende un sottoinsieme di espressioni regolari, e fa una passeggiata casuale attraverso di esso.

+0

Will String :: Random genera necessariamente tutti i valori possibili nel set di soluzioni? Ho un problema simile ma ho bisogno di tutti i valori possibili. Sono disposto a limitare fortemente la mia lingua. – IceArdor

0

È assolutamente possibile generare dati da espressioni regolari. Alcuni progetti open source sono in fase di sviluppo in questo settore.

Un tutorial su how to generate random password from regex spiegherà come è fatto. xeger (reverse of regex, un progetto opensource) viene utilizzato nel tutorial. Si prega di passare attraverso il tutorial per saperne di più.