26 def number_of_captures
27 Regexp
.new("|#{source}").match('').captures
.length
31 options
& MULTILINE
== MULTILINE
35 def optionalize(pattern
)
36 case unoptionalize(pattern
)
37 when /\A(.|\(.*\))\Z/ then "#{pattern}?"
38 else "(?:#{pattern})?"
42 def unoptionalize(pattern
)
43 [/\A\(\?:(.*)\)\?\Z/, /\A(.|\(.*\))\?\Z/].each
do |regexp
|
44 return $1 if regexp
=~ pattern