Groups a regular expressions collection
Version 1.002
Groups regular expressions to one regular expression
use Regexp::RegGrp; my $reggrp = Regexp::RegGrp->new( { reggrp => [ { regexp => '%name%', replacement => 'John Doe', modifier => $modifier }, { regexp => '%company%', replacement => 'ACME', modifier => $modifier } ], restore_pattern => $restore_pattern } ); $reggrp->exec( \$scalar );
To return a scalar without changing the input simply use (e.g. example 2):
my $ret = $reggrp->exec( \$scalar );
The first argument must be a hashref. The keys are:
Arrayref of hashrefs. The keys of each hashref are:
A regular expression
Scalar or sub. A replacement for the regular expression match. If not set, nothing will be replaced except \*(L"store\*(R" is set. In this case the match is replaced by something like sprintf(\*(L"\x01%d\x01\*(R", $idx) where $idx is the index of the stored element in the store_data arrayref. If \*(L"store\*(R" is set the default is: sub { return sprintf( "\x01%d\x01", $_[0]->{store_index} ); } If a custom restore_pattern is passed to to constructor you \s-1MUST\s0 also define a replacement. Otherwise it is undefined. If you define a subroutine as replacement an hashref is passed to this subroutine. This hashref has four keys:
Scalar. The match of the regular expression.
Arrayref of submatches.
The next index. You need this if you want to create a placeholder and store the replacement in the $self->{store_data} arrayref.
Hashref of custom options.
Scalar. The default is 'sm'.
Scalar or sub. If you define a subroutine an hashref is passed to this subroutine. This hashref has three keys:
Scalar. The match of the regular expression.
Arrayref of submatches.
Hashref of custom options.
A replacement for the regular expression match. It will not replace the match directly. The replacement will be stored in the $self->{store_data} arrayref. The placeholders in the text can easily be rereplaced with the restore_stored method later.
Scalar or Regexp object. The default restore pattern is qr~\x01(\d+)\x01~ This means, if you use the restore_stored method it is looking for \x010\x01, \x011\x01, ... and replaces the matches with $self->{store_data}->[0], $self->{store_data}->[1], ...
Common usage. #!/usr/bin/perl
use strict; use warnings;
use Regexp::RegGrp;
my $reggrp = Regexp::RegGrp->new( { reggrp => [ { regexp => '%name%', replacement => 'John Doe' }, { regexp => '%company%', replacement => 'ACME' } ] } );
open( INFILE, 'unprocessed.txt' ); open( OUTFILE, '>processed.txt' );
my $txt = join( '', <INFILE> );
$reggrp->exec( \$txt );
print OUTFILE $txt; close(INFILE); close(OUTFILE);
A scalar is requested by the context. The input will remain unchanged. #!/usr/bin/perl
use strict; use warnings;
use Regexp::RegGrp;
my $reggrp = Regexp::RegGrp->new( { reggrp => [ { regexp => '%name%', replacement => 'John Doe' }, { regexp => '%company%', replacement => 'ACME' } ] } );
open( INFILE, 'unprocessed.txt' ); open( OUTFILE, '>processed.txt' );
my $unprocessed = join( '', <INFILE> );
my $processed = $reggrp->exec( \$unprocessed );
print OUTFILE $processed; close(INFILE); close(OUTFILE);
Merten Falk, \*(C`<nevesenin at cpan.org>\*(C'
Please report any bugs or feature requests through the web interface at http://github.com/nevesenin/regexp-reggrp-perl/issues <http://github.com/nevesenin/regexp-reggrp-perl/issues>.
You can find documentation for this module with the perldoc command.
perldoc Regexp::RegGrp
Copyright 2010, 2011 Merten Falk, all rights reserved.
This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.