Hello everybody,
Can we perform substitution to the matched pattern inside a regular
expression so that the modified pattern gets returned instead of earlier
matched one ?
As a reference, in the following code below, I want to perform the
substitution of "~" character with "_" character to the value of "\3" inside
a regular expression so that $3 ultimately becomes "are___you___fine?"
instead of "are~~~you~~~fine?".
I tried checking with the perl docs but of no help. The only hope is using
"(?{})" which not only is experimental but also doesn't allow me to modify
the value of "\3" inside a regular expression.
Note : The reason why I want a solution entirely based on regular expression
because this regular expression will be used in a tool which supports usage
of perl regular expression inside its configuration file.
The source code as well as the output is mentioned below.
Please suggest.
==========================================================================================
[root@host1 ~]#
[root@host1 ~]# cat check.pl
#!/usr/bin/perl
use strict;
use warnings;
my $text1 = q/hello~~~how~~~are~~~you~~~fine?~~~OK/;
my $regex1 = qr/^([^\~]+)\~\~\~([^\~]+)(?:\~\~\~){0,1}(.*)\~\~\~([^\~]+)$/;
print "\n";
print "text1 is [$text1]\n\n";
print "regex1 is [$regex1]\n\n";
if ( $text1 =~ /$regex1/ )
{
print "Regular expression matched\n\n";
print "Field 1 : [$1]\n";
print "Field 2 : [$2]\n";
print "Field 3 : [$3]\n";
print "Field 4 : [$4]\n";
print "\n";
}
else
{
print "Regular expressing didn't matched\n\n";
}
[root@host1 ~]#
[root@host1 ~]# perl check.pl
text1 is [hello~~~how~~~are~~~you~~~fine?~~~OK]
regex1 is [(?-xism:^([^~]+)~~~([^~]+)(?:~~~){0,1}(.*)~~~([^~]+)$)]
Regular expression matched
Field 1 : [hello]
Field 2 : [how]
Field 3 : [are~~~you~~~fine?]
Field 4 : [OK]
[root@host1 ~]#
==========================================================================================
Thanks & Regards,
Amit Saxena
Thread Next