Finden Sie ein Muster, das mit 'a' übereinstimmt, und ignorieren Sie das 'a', das in 'b' und 'c' liegt.

Benötigen Sie einen zusammengesetzten Ausdruck für

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

(Ignorieren der in Klammern stehenden) hiera=" from"; b="("; and c=")";

Das nächste (aber ungültige) Muster, das ich schreiben könnte, ist

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

Mein Ausdruck verweigert, ob ein "von" in Klammern steht, aber ich möchte ein solches "von" strikt ignorieren.


Übereinstimmungen sollten gefunden werden in:

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

Zeichenfolgen, die keine Übereinstimmungen enthalten: (Da ich das "Von" in Klammern ignorieren möchte)

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




Relevantes Material: (nicht viel zu lesen)

Der hilfreichste Link, der meiner Frage näher kommt, wie man "Muster", aber nicht "normal" zuordnen kann, war eine Antwort von stanav am 31. Juli 2009, 08:05 Uhr in folgendem Link ...

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

Ebenfalls:Regex in C #, das "dies" enthält, aber nicht "das"

Ebenfalls:Regulärer Ausdruck für eine Zeile, die kein Wort enthält?

Ich habe ungefähr eine Woche lang studiert / gesucht, aber es ist immer noch komplex für mich :)

Antworten auf die Frage(2)

Ihre Antwort auf die Frage