13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
|
# File 'lib/regex_sample.rb', line 13
def generate(re)
times = Proc.new{ $1 * Array(Range.new($2.to_i, $3.to_i)).sample }
return false unless re.respond_to?(:source)
re = re.source
re
.gsub(/\A\\A/, '') .gsub(/\\z\z/, '') .gsub(/\{(\d+)\}/, '{\1,\1}') .gsub(/(?<!\\)\?/, '{0,1}') .gsub(/(?<!\\)\+/, '{1,2}') .gsub(/\\\?/, '?') .gsub(/\\\+/, '+') .gsub(/(\[[^\]]+\])\{(\d+),(\d+)\}/) { times.call } .gsub(/(\([^\)]+\))\{(\d+),(\d+)\}/) { times.call } .gsub(/(\\p\{katakana\})\{(\d+),(\d+)\}/) { times.call } .gsub(/(\\p\{hiragana\})\{(\d+),(\d+)\}/) { times.call } .gsub(/(\\?.)\{(\d+),(\d+)\}/) { times.call } .gsub(/\((.*?)\)/){ |match| match.gsub(/[\(\)]/, '').split('|').sample } .gsub(/\[([^\]]+)\]/){ |match| match.gsub(/(\w\-\w)/) {|range| Array(Range.new(*range.split('-'))).sample } } .gsub('\p{katakana}'){ Katakanas.sample }
.gsub('\p{hiragana}'){ Hiraganas.sample }
.gsub(/(?<!\\)\\-/, '-') .gsub(/\[([^\]]+)\]/){ $1.split('').sample } .gsub('\d'){ Numbers.sample }
.gsub('\w'){ Letters.sample }
end
|