tags:

views:

46

answers:

3

I simply don't understand what the \G anchor does.

If I execute /\G\d\d/ on 1122aa33, it will match 11 and 22. However, when I try /\d\d\G/ on 1122aa33, it matches nothing.

Can someone enlighten me?

+1  A: 

Reference link

It basically matches from the end of the "previous match", which on the first run of a regex is considered to be the beginning of the string.

In other words, if you ran /\G\d\d/ twice on your string 1122aa33, the second run would return a match on 22.

eldarerathis
+2  A: 

\G is an anchor which matches the previous match position.

On the first pass, \G is equivalent to \A, which is the start of the string anchor. Since \d\d\A will never match anything (because how can you have two digits before the start of the string?), \d\d\G will also never match anything.

Daniel Vandersluis
so that mean \G only use to check with previous match?.. so \d\d\G is pure invalid syntax right?
slier
It's not invalid, per se, but it is meaningless. Basically, the regular expression engine continues evaluating your string after a match is found, either to see if that match can be expanded (ie. `/.*/` with the string 'abc' will first match `a`, then expand the match to `ab`, then to `abc`) or if any other matches can be found. In the latter case, `\G` specifies that subsequent matches must begin following the previous match.
Daniel Vandersluis
@Daniel, yes, you worded it (much) better: it's indeed **not** invalid.
Bart Kiers
thanks for your answer daniel..
slier
+1  A: 

According to this:

The anchor \G matches at the position where the previous match ended. During the first match attempt, \G matches at the start of the string in the way \A does.

Now, to actually answer your question: In your second example, the one that yields no results, \G can't match the start of the string, because you're seeking two digits first, and, without that initial match, \G won't match anything else, either.

djacobson