1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222
|
# NAME
Regexp::RegGrp - Groups a regular expressions collection
<div>
<a href='https://travis-ci.org/leejo/regexp-reggrp-perl?branch=master'><img src='https://travis-ci.org/leejo/regexp-reggrp-perl.svg?branch=master' alt='Build Status' /></a>
<a href='https://coveralls.io/r/leejo/regexp-reggrp-perl'><img src='https://coveralls.io/repos/leejo/regexp-reggrp-perl/badge.png?branch=master' alt='Coverage Status' /></a>
</div>
# VERSION
Version 2.00
# DESCRIPTION
Groups regular expressions to one regular expression
# SYNOPSIS
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:
- reggrp (required)
Arrayref of hashrefs. The keys of each hashref are:
- regexp (required)
A regular expression
- replacement (optional)
Scalar or sub.
A replacement for the regular expression match. If not set, nothing will be replaced except "store" is set.
In this case the match is replaced by something like sprintf("\\x01%d\\x01", $idx) where $idx is the index
of the stored element in the store\_data arrayref. If "store" 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 MUST 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:
- match
Scalar. The match of the regular expression.
- submatches
Arrayref of submatches.
- store\_index
The next index. You need this if you want to create a placeholder and store the replacement in the
$self->{store\_data} arrayref.
- opts
Hashref of custom options.
- modifier (optional)
Scalar. The default is 'sm'.
- store (optional)
Scalar or sub. If you define a subroutine an hashref is passed to this subroutine. This hashref has
three keys:
- match
Scalar. The match of the regular expression.
- submatches
Arrayref of submatches.
- opts
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.
- restore\_pattern (optional)
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\], ...
# EXAMPLES
- Example 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);
- Example 2
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);
# AUTHOR
Merten Falk, `<nevesenin at cpan.org>`. Now maintained by LEEJO
# BUGS
Please report any bugs or feature requests through the web interface at
[http://github.com/leejo/regexp-reggrp-perl/issues](http://github.com/leejo/regexp-reggrp-perl/issues).
# SUPPORT
You can find documentation for this module with the perldoc command.
perldoc Regexp::RegGrp
# COPYRIGHT & LICENSE
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.
|