After the first match, \G will no longer be matching at the start of the string (^), so the output will just be
whitespace done
Both ^ and \G are called "assertions". The Assertions section of perlre has quite a bit to say about \G and provides links to further information.
It is certainly possible to use both of those assertions in the same regular expression. In fact, changing each instance of '^\G' in your code to '^.*\G', provides your desired output.
Here's my test code:
#!/usr/bin/env perl use strict; use warnings; my $string = " a 1 # "; my $i = 0; while () { if ( $string =~ /^.*\G\s+/gc ) { print "whitespace\n"; } elsif ( $string =~ /^.*\G[0-9]+/gc ) { print "integer\n"; } elsif ( $string =~ /^.*\G\w+/gc ) { print "word\n"; } else { print "done\n"; last; } }
Output:
whitespace word whitespace integer whitespace done
-- Ken
In reply to Re: anchor ^ and \G
by kcott
in thread anchor ^ and \G
by Anonymous Monk
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |