Parses segmented string expression and converts it into a Regexp
Strexp.compile('foo') # => %r{\Afoo\Z} Strexp.compile('foo/:bar', {}, ['/']) # => %r{\Afoo/(?<bar>[^/]+)\Z} Strexp.compile(':foo.example.com') # => %r{\A(?<foo>.+)\.example\.com\Z} Strexp.compile('foo/:bar', {:bar => %r[a-z]+/}, ['/']) # => %r{\Afoo/(?<bar>[a-z]+)\Z} Strexp.compile('foo(.:extension)') # => %r{\Afoo(\.(?<extension>.+))?\Z} Strexp.compile('src/*files') # => %r{\Asrc/(?<files>.+)\Z}
# File lib/rack/mount/strexp.rb, line 25 def compile(str, requirements = {}, separators = [], anchor = true) return Regexp.compile(str) if str.is_a?(Regexp) requirements = requirements ? requirements.dup : {} normalize_requirements!(requirements, separators) parser = StrexpParser.new parser.anchor = anchor parser.requirements = requirements begin re = parser.scan_str(str) rescue Racc::ParseError => e raise RegexpError, e.message end Regexp.compile(re) end