Note that hexadecimal digits can be matched by a POSIX character class, or in 1.9 there is a special escape for them:

  /\A(?:[[:xdigit:]]{1,2},)*[[:xdigit:]]{1,2}\z/ # 1.8, 1.9

or

  /\A(?:\h{1,2},)*\h{1,2}\z/ # 1.9

would match a valid string.

Mike


On 2012-03-31, at 4:15 PM, Peter Vandenabeele wrote:

> On Sat, Mar 31, 2012 at 8:31 PM, Jan E. <lists / ruby-forum.com> wrote:
>> Hi,
>> 
>> What makes you think that only the last two pairs are matched? This is
>> impossible, because you're using the \A and \Z anchors. Either the whole
>> string matches or it doesn't match at all.
>> 
>> The regex is actually correct and it does match the example string.
> 
> The confusion is that only two capturing groups are returned
> (while the first part between brackets matches many times).
> 
> 1.9.3p125 :001 > s = "11,1,aa,a,1b,3b,55,b6"
> => "11,1,aa,a,1b,3b,55,b6"
> 1.9.3p125 :002 > s.match(/\A([0-9a-fA-F]{1,2},{1})*([0-9a-fA-F]{1,2}){1}\Z/)
> => #<MatchData "11,1,aa,a,1b,3b,55,b6" 1:"55," 2:"b6">
> 1.9.3p125 :003 > s.match(/\A([0-9a-fA-F]{1,2},)*([0-9a-fA-F]{1,2})\Z/)
> => #<MatchData "11,1,aa,a,1b,3b,55,b6" 1:"55," 2:"b6">
> 
> And as mentioned by gabe, maybe scan is what the  OP was after;
> 
> 1.9.3p125 :004 > s.scan(/[0-9a-f]{1,2}/i).inspect
> => "[\"11\", \"1\", \"aa\", \"a\", \"1b\", \"3b\", \"55\", \"b6\"]"
> 
> 1.9.3p125 :005 > s.scan(/([0-9a-f]{1,2}),/i).inspect # more selective
> on the comma
> => "[[\"11\"], [\"1\"], [\"aa\"], [\"a\"], [\"1b\"], [\"3b\"], [\"55\"]]"
> 
> HTH,
> 
> Peter

-- 

Mike Stok <mike / stok.ca>
http://www.stok.ca/~mike/

The "`Stok' disclaimers" apply.