Encontre um padrão para combinar 'a', ignorando que 'a', que se encontra dentro de 'b' e 'c'

Precisa de uma expressão composta para

" from" such that " from" is not within parenthesis

(ignorando aqueles que estão entre parênteses) aquia=" from"; b="("; and c=")";

O padrão mais próximo (mas inválido) que eu poderia escrever é

string pat = @"^((?!\(.* from.*\)).)* from((?!\(.* from.*\)).)*$";

minha expressão nega se algum "de" está presente entre parênteses, mas eu quero ignorar estritamente tal "de"


As correspondências devem ser encontradas em:

1: " from" 2:select field1 from t1 (select field1 from t1)   ---- 1 time in both
3: select field1 from t1 (select field1 from t1)select field1 from t1  ---2 times

Strings não contendo correspondências: (Porque eu quero ignorar o "from" entre parênteses)

1: select field1 no_f_rom_OutOf_Parenthesis t1 (select field1 from t1)
2: (select field1 from t1)  3: "" (Empty String) 4. No word as form
0 times in all four strings




Material relevante: (não é necessário ler muito)

O link mais útil mais próximo à minha pergunta dizendo como combinar 'padrão', mas não 'regular' tem sido uma resposta por stanav em 31 de julho de 2009, 08:05 no seguinte link ...

http://www.vbforums.com/archive/index.php/t-578417.html

Além disso:Regex em C # que contém "this" mas não "that

Além disso:Expressão regular para corresponder a uma linha que não contém uma palavra?

Eu estudei / procurei cerca de uma semana, mas ainda é complexo para mim :)

questionAnswers(2)

yourAnswerToTheQuestion