my $x ='((A & B)\' | (A & C & (A & B & D | (A & (B\' & D)\')\'))'; #### (!(A & B) | (A & C & (A & B & D | !(A & !(!B & D)))) #### #!/usr/bin/perl use strict; use warnings; my $x = '((A & B)\' | (A & C & (A & B & D | (A & (B\' & D)\')\'))'; print "Given: $x\n"; $x =~ s/(\(\s*[^()]+\s*\))\'/\!$1/g; print "Calculated: ",$x,"\n"; $x =~s/([a-zA-Z]\w*)\'/\!$1/g; $x =~ s/((\(){1}\s*.*?([!][(])+.*?\)\s*)\'/\!$1/g; print "NewVl : ",$x,"\n";