2013-04-07 52 views
6

Tôi tự hỏi nếu có một cách để tạo chuỗi ngẫu nhiên từ một regex như:Tạo chuỗi ngẫu nhiên dựa trên Regex?

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

tôi thấy randexp (https://github.com/benburkert/randexp) nhưng nó dường như không làm việc với một ví dụ cơ bản như trên và dù sao tôi cảm thấy nó đã phải rời bỏ rơi .

Bất kỳ ai?

+0

@iAmRubuuu Đây không phải là thực sự ngẫu nhiên và được xác định bởi một mô hình thay thế. – squiguy

+0

Nó sẽ cần một số ràng buộc cơ bản, phải không? Ý tôi là, không có cách nào để tạo ra một regex ngẫu nhiên phù hợp với '/.*/', vì số lượng ký tự liên quan có thể là bất kỳ độ dài nào giữa 0 vô hạn. Nên * số * của các ký tự được ngẫu nhiên cũng có, hoặc chúng ta nên cố gắng chọn ngẫu nhiên một giá trị từ một tập vô hạn? Hoặc bạn đang đề xuất một ràng buộc trong đó regex không thể cho phép những thứ như * hoặc + (như trường hợp với ví dụ của bạn)? –

+0

Ngoài ra, nếu bạn có '.to_s' trên một regex cung cấp một chuỗi kết hợp ngẫu nhiên, đó sẽ là một wtf khá nghiêm trọng cho nhà phát triển tiếp theo thấy mã đó. –

Trả lời

1

Không nhưng thế nào về:

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

những gì 'x = ~/[a-z0-9] /' đang làm một cách hợp lý? –

+0

Chỉ chọn các ký tự khớp với regex – pguardiario

+0

'mẫu' không cho phép trùng lặp, vì vậy" qqf01 "sẽ không bao giờ xảy ra. – steenslag

Các vấn đề liên quan