![]() |
|
Just another Perl shrine | |
PerlMonks |
What good is <CODE>\G</CODE> in a regular expression?by faq_monk (Initiate) |
on Oct 08, 1999 at 00:25 UTC ( [id://674]=perlfaq nodetype: print w/replies, xml ) | Need Help?? |
Current Perl documentation can be found at perldoc.perl.org. Here is our local, out-dated (pre-5.6) version:
The notation
For example, suppose you had a line of text quoted in standard mail and
Usenet notation, (that is, with leading
s/^(>+)/':' x length($1)/gem;
Or, using
s/\G>/:/g;
A more sophisticated use might involve a tokenizer.
The following lex-like example is courtesy of Jeffrey Friedl. It did not
work in 5.003 due to bugs in that release, but does work in 5.004 or
better. (Note the use of
while (<>) { chomp; PARSER: { m/ \G( \d+\b )/gcx && do { print "number: $1\n"; redo; }; m/ \G( \w+ )/gcx && do { print "word: $1\n"; redo; }; m/ \G( \s+ )/gcx && do { print "space: $1\n"; redo; }; m/ \G( [^\w\d]+ )/gcx && do { print "other: $1\n"; redo; }; } } Of course, that could have been written as
while (<>) { chomp; PARSER: { if ( /\G( \d+\b )/gcx { print "number: $1\n"; redo PARSER; } if ( /\G( \w+ )/gcx { print "word: $1\n"; redo PARSER; } if ( /\G( \s+ )/gcx { print "space: $1\n"; redo PARSER; } if ( /\G( [^\w\d]+ )/gcx { print "other: $1\n"; redo PARSER; } } } But then you lose the vertical alignment of the regular expressions.
|
|