lib/regexp-examples/constants.rb in regexp-examples-0.0.0 vs lib/regexp-examples/constants.rb in regexp-examples-0.0.1

- old
+ new

@@ -1,11 +1,37 @@ module RegexpExamples # Number of times to repeat for Star and Plus repeaters TIMES = 2 - # Set of chars for Dot and negated [^] char groups - #CHARS = [("a".."z").to_a, ("A".."Z").to_a, ".", ",", ";"].flatten - #TODO: Make these character sets more complete - #e.g. Sets for \d, \w, \h, \s - CHARS = %w{a b c d e} + # Maximum number of characters returned from a char set, to reduce output spam + # For example: + # If MaxGroupResults = 5, then + # \d = [0, 1, 2, 3, 4] + MaxGroupResults = 5 + + module CharSets + Lower = Array('a'..'z') + Upper = Array('A'..'Z') + Digit = Array('0'..'9') + Punct = [33..47, 58..64, 91..96, 123..126].map { |r| r.map { |val| val.chr } }.flatten + Any = Lower | Upper | Digit | Punct + end + + # Map of special regex characters, to their associated character sets + BackslashCharMap = { + 'd' => CharSets::Digit, + 'D' => CharSets::Lower | CharSets::Upper | CharSets::Punct, + 'w' => CharSets::Lower | CharSets::Upper | CharSets::Digit | ['_'], + 'W' => CharSets::Punct.reject { |val| val == '_' }, + 's' => [' ', "\t", "\n", "\r", "\v", "\f"], + 'S' => CharSets::Any - [' ', "\t", "\n", "\r", "\v", "\f"], + + 't' => ["\t"], # tab + 'n' => ["\n"], # new line + 'r' => ["\r"], # carriage return + 'f' => ["\f"], # form feed + 'a' => ["\a"], # alarm + 'v' => ["\v"], # vertical tab + 'e' => ["\e"], # escape + } end