>perl -wMstrict -le "my $and = qr{ \b AND \b }xms; my $or = qr{ \b OR \b }xms; my $not_connective = qr{ (?! $and | $or) }xms; my $term = qr{ \b (?: $not_connective \w)+ \b }xms; my $terms = qr{ $term (?: \s+ $term)* }xms; my $or_terms = qr{ $terms (?: \s+ $or \s+ $terms)+ }xms; print '------ output ------'; my $s = shift; $s =~ s{ ($or_terms) }{($1)}xmsg; print $s; " "huckabee AND jfkadlsfj fdsfldfj06329 OR reagan AND OReilly AND clinton OR sebelius OR mccain AND biden OR ANDERSON COOPER" ------ output ------ huckabee AND (jfkadlsfj fdsfldfj06329 OR reagan) AND OReilly AND (clinton OR sebelius OR mccain) AND (biden OR ANDERSON COOPER)