2013-04-07 11 views
6

私のような正規表現からランダムな文字列を生成する方法があるかしら:Regexに基づいてランダムな文字列を生成しますか?

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

は私がrandexphttps://github.com/benburkert/randexp)を見つけたが、私はそれが放棄残って感じるように上記ととにかく基本的な例では動作しないようです。

誰でも?

+0

@iAmRubuuuこれは本当にランダムではなく、代わりに、パターンによって決定されます。 – squiguy

+0

それはいくつかの基本的な制約が必要でしょうか?つまり、関係する文字の数は0から無限の間の任意の長さになる可能性があるため、 '/.*/ 'と一致するランダムな正規表現を生成する方法はありません。文字の* number *もランダムでなければならないのですか、または無限集合から値をランダムに選択しようとしていますか?あるいは、正規表現が*や+のようなものを許さないという制約を提案していますか?(あなたの例のように) –

+0

また、正規表現に '.to_s'を指定すると、ランダムに一致する文字列が提供されます。これは、そのコードを見た次の開発者にとっては非常に重要な意味を持ちます。 –

答えて

1

ありませんを参照してくださいが、方法について:

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

'x =〜/ [a-z0-9] /'は論理的に何をしていますか? –

+0

正規表現 – pguardiario

+0

と一致する文字のみを選択しているので、 'sample'は重複を許さないので、" qqf01 "は決して起こりません。 – steenslag

関連する問題