I think I figured it out. I think it's related to how PCRE remove subsequent non participating group (again, non participating group and empty group are different things), which you mentioned here
However it seems that your implementation of this removal has a slight issue when the non participating group is the first group returned.

Because I can reproduce the problem without using \G with $regex(2,/([a-z])*2/F), which returns $regml(0) = 0 when it should be 1, and $regml(1) should be $null


#mircscripting @ irc.swiftirc.net == the best mIRC help channel