use strict;
my $str = 'Expression validator
^((?:[A-z]+)|((-|\\+)?\\d+))( +(\\++|-+) +((?:-?\\d+)|(?:[A-z]+)))*$
Assignment validator
^([A-z]+)(?: *= *)(\\d+|[A-z]+)$
c= a
8
8 + 4
-2 + 4 - 5 + 6
9 +++ - 10 -- 8
9 --- + 10
9 --- -10
9 +++ -10 -- 8
3 --- 5
14 - 12
-3 2
name = 44
a = 5
capName = 6 + 4
capName = 6
n = 3
m=4
a = 5
b = a
v= 7
n =9
c= a
A variable can have a name consisting of more than one letter.
count = 10
To print the value of a variable you should just type its name.
N = 5
N
5
It should be possible to set a new value to an existing variable.
a = 1
a = 2
a = 3
a
3
If an identifier or value of a variable is invalid, the program must print a message like the one below.
a1 = 8
Invalid identifier
n = a2a
Invalid assignment
a = 7 = 8
Invalid assignment
';
my $regex = qr/^([A-z]+)(?: *= *)(\d+|[A-z]+)$/mp;
if ( $str =~ /$regex/g ) {
print "Whole match is ${^MATCH} and its start/end positions can be obtained via \$-[0] and \$+[0]\n";
# print "Capture Group 1 is $1 and its start/end positions can be obtained via \$-[1] and \$+[1]\n";
# print "Capture Group 2 is $2 ... and so on\n";
}
# ${^POSTMATCH} and ${^PREMATCH} are also available with the use of '/p'
# Named capture groups can be called via $+{name}
Please keep in mind that these code samples are automatically generated and are not guaranteed to work. If you find any syntax errors, feel free to submit a bug report. For a full regex reference for Perl, please visit: http://perldoc.perl.org/perlre.html