This is a new project, but is reasonably mature for its age. ;) See http://github.com/hal9000/regexador When a regular expression grows too complex to read or maintain, construct a small script to describe it instead. Example from the README (see below). Comments welcome. Thanks! Hal Fulton Suppose we want to match a string consisting of a single IP address. (Remember that the numbers can only range as high as 255.) Here is traditional regular expression notation: /^(25[0-5]|2[0-4]\d|([01])?(\d){1,2})\.(25[0-5]|2[0-4]\d|([01])?(\d){1,2})\.(25[0-5]|2[0-4]\d|([01])?(\d){1,2})\.(25[0-5]|2[0-4]\d|([01])?(\d){1,2})$/ And here is Regexador notation: dot = "." num = "25" D5 | `2 D4 D | maybe D1 1,2*D match BOS num dot num dot num dot num EOS end In your Ruby code, you can create a Regexador "script" or "program" (probably by means of a here-document) that you can then pass into the Regexador class. At minimum, you can convert this into a "real" Ruby regular expression; there are a few other features and functions, and more may be added. So here is a complete Ruby program: require 'regexador' program = <<-EOS dot = "." num = "25" D5 | `2 D4 D | maybe D1 0,2*D match WB num dot num dot num dot num WB end EOS pattern = Regexador.new(program) puts "Give me an IP address" str = gets.chomp rx = pattern.to_regex # Can retrieve the actual regex if pattern.match?(str) # ...or use in other direct ways puts "Valid" else puts "Invalid" end