(defn match-number [^String s]
(let [int-matcher (.matcher int-pattern s)]
(if (.matches int-matcher)
(match-int int-matcher)
(let [float-matcher (.matcher float-pattern s)]
(if (.matches float-matcher)
(match-float s float-matcher)
(let [ratio-matcher (.matcher ratio-pattern s)]
(when (.matches ratio-matcher)
(match-ratio ratio-matcher))))))))