I have the following code which splits a SQL clause into field, operator, and value using a regular expression of alternations composed of known operators. It works fine unless the quoted value in the SQL clause contains an operator character (the equal sign in my example), in which case $val contains 'Response.
I tried adding the usual pattern for quoted strings ("[^"]+") to the front of the regex alternations but that does not help. I tried adding the limit value of ",3" to split but that also does not help. How can I modify my regular expression (variable $opr_regex) to skip quoted values when splitting the SQL clause?
#!/usr/bin/perl
use strict;
use warnings;
my $clause = qq(failure_reason <> 'Response=X');
my @operators = qw ( <> != !< !> <= >= < > = );
my $opr_regex = '(\s*' . join('\s*|\s*', @operators) . '\s*)';
my ($fld,$opr,$val) = split /$opr_regex/, $clause, 3;
print "\n\$opr_regex = $opr_regex\n\n";
print "\$clause = $clause\n\n";
print "\$fld = |$fld|\n";
print "\$opr = |$opr|\n";
print "\$val = |$val|\n\n";
"Its not how hard you work, its how much you get done."