/^((\d+[%@]?)|(x\d+)|(\d+x\d+[!^<>@]?))$/
That’s what I got. Anything better? Holla at me!
Update
Looks like Thoughtbot uses this matcher in paperclip:
# Parses a "WxH" formatted string, where W is the width and H is the height.
def self.parse string
if match = (string && string.match(/\b(\d*)x?(\d*)\b([\>\<\#\@\%^!])?/i))
Geometry.new(*match[1,3])
end
end