Ja na Twoim miejscu nie bawiłbym się w wyrażenia regularne (a przynajmniej nie robiłbym tego tylko i wyłącznie na regexpach). Za to zbudowałbym prościutki parser, który zagłebiając się w kolejne nawiasy zamieniałby Twoje wyrażenie w ten sposób:
Kod
1. (1 OR 2) OR (1 AND 2 OR (1 AND 2))
2. W_1 OR (1 AND 2 OR W_2)
3. W_1 OR W_3
4. W_4
Zawartość kolejnych nawiasów mógłbyś walidować w sposób, jaki stosujesz dla prostych warunków.
Zresztą, jeśli chodzi tylko o poprawność składniową (ew. filtrowanie znaków), możesz pokusić się o usunięcie nawiasów, sprawdzenie poprawności wyrażenia i porównanie liczby nawiasów otwierających i zamykających. Bo jeśli to jest poprawne:
Kod
(1 OR 2) OR (1 AND 2 OR (1 AND 2))
to poniższe również musi być poprawne składniowo (chociaż może mieć inny sens logiczny):
Kod
1 OR 2 OR 1 AND 2 OR 1 AND 2