2013-04-07 9 views
6

Zastanawiam się, czy istnieje sposób, aby wygenerować losowy ciąg znaków z regex takich jak:Generowanie losowych ciągów na podstawie Regex?

/[a-z0-9]{5}/.to_s 
#=> "dsar3" 

znalazłem randexp (https://github.com/benburkert/randexp), ale wydaje się, że nie działa z podstawowym przykład jak powyżej w każdym razie czuję, że pozostało opuszczony .

Ktoś?

+0

@iAmRubuuu To naprawdę nie jest przypadkowa i jest określona przez wzór zamiast. – squiguy

+0

Potrzebowałoby to podstawowych ograniczeń, prawda? Mam na myśli, że nie ma sposobu na wygenerowanie losowego wyrażenia regularnego pasującego do '/.*/', ponieważ liczba znaków może wynosić od 0 do nieskończoności. Czy liczba * znaków powinna być losowa, czy też powinniśmy próbować losowo wybrać wartość z nieskończonego zestawu? Lub sugerujesz ograniczenie, w którym regex nie może pozwolić na takie rzeczy jak * lub + (jak to jest w przypadku twojego przykładu)? –

+0

Ponadto, gdybyś '.to_s' na regex dostarczył losowy pasujący ciąg, byłoby to całkiem poważnym plufem dla następnego programisty, który zobaczył ten kod. –

Odpowiedz

1

No ale jak o:

(0..255).map(&:chr).select{|x| x =~ /[a-z0-9]/}.sample(5).join 
#=> "qif0l" 
+0

co 'x = ~/[a-z0-9] /' robi logicznie? –

+0

Wybiera tylko znaki, które pasują do wyrażenia regularnego – pguardiario

+0

'sample' nie pozwala na duplikowanie, więc" qqf01 "nigdy by się nie wydarzyło. – steenslag

Powiązane problemy