On Apr 13, 2004, at 4:39 PM, Daniel Sheppard wrote: >> # A bit less more complex, but more precise; matches up to "r42" >> # rough translation: "match an 'r', followed by either the a digit >> # followed by a non-digit; or a number 1-3 followed by one digit >> # and a non-digit; or the number 4 followed by a 0, 1, or 2. >> register_regex = /r(?:\d\D|[1-3]\d\D|4[012]\D)/ > > That doesn't work if the register is at the EOF (is that important?). oops :) nice catch; \D will consume the character it matches, \b is zero-width and doesn't match a character, just the space between two characters... > > /\br([1-3]+\d|4[012])\b)/ > > \b == word boundary > ( == begin brackets for the boolean expression > [123]+\d == any digit, optionally preceded by 1,2 or 3 (ie 0 > thru 39) > | == or > 4[012] == 4 followed by 0,1 or 2 (40 thru 42) > ) == end boolean expression > \b == word boundary