##
(!(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";