2013-04-07 79 views
6

我不知道是否有產生來自像一個正則表達式隨機字符串的方式:基於正則表達式生成隨機字符串?

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

我發現randexphttps://github.com/benburkert/randexp),但它似乎不是像上面反正一個基本的例子工作,我覺得它是我遺棄。

有人嗎?

+0

@iAmRubuuu這不是真正隨機的,是由一個模式,而不是確定的。 – squiguy 2013-04-07 07:20:50

+0

這需要一些基本的約束,對吧?我的意思是,沒有辦法生成匹配'/.*/'的隨機正則表達式,因爲涉及的字符數可以是0和無限長之間的任何長度。如果字符的數字*也是隨機的,或者我們應該試圖從無限集合中隨機選擇一個值?或者你是否提出了一個限制,其中正則表達式不允許像*或+這樣的東西(就像你的例子那樣)? – 2013-04-14 23:58:43

+0

另外,如果你在正則表達式中有'.to_s'提供了一個隨機匹配的字符串,對於下一個看到該代碼的開發者來說,這將是一個非常嚴重的wtf。 – 2013-04-15 00:00:53

回答

1

沒有,但怎麼樣:

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

'x =〜/ [a-z0-9] /'在邏輯上做什麼? – 2013-04-07 07:42:29

+0

它只選擇匹配正則表達式的字符 – pguardiario 2013-04-07 07:44:00

+0

'sample'不允許重複,所以「qqf01」不會發生。 – steenslag 2013-04-07 10:42:06

相關問題