Tak więc kolego, to co podałem ja na początku w 3 przykładzie i to co potwierdził Johny
string Warunek = @"\{(.*?)\}";
jest poprawne i zwraca dobrze podane wartości. Kłopot zaczyna się wtedy, gdy masz "troszkę inaczej" poukładany kod. Już wyjaśniam.
Pod pojęciem troszkę inaczej mam na myśli (standardowy) kod np.
class A
{
public function B()
{
}
}
w tym przypadku wyrażenie regularne zwróci wartość public function B() {
co jest oczywiście z punktu widzenia programu poprawne, gdyż regex miał wyciągać dane między { a }
Wyrażenie to zadziała poprawnie dla takiego kodu
public function A()
{
KOD FUNKCJI
}
public function B()
{
KOD FUNKCJI2
}
w takim wypadku otrzymamy listę gdzie 0 elementem będzie KOD FUNKCJI a 1 elementem KOD FUNKCJI2.
Być może są na to lepsze sposoby, nawet na pewno są, lecz ja również zaczynam przygodę z programowaniem i możliwe, że Ci to pomoże. Ja bym po prostu puścił coś takiego
List<int> Poczatek = new List<int>();
List<int> Koniec = new List<int>();
for(int i=0; i < kod.Length;i++)
{
if( kod[i] == "{" ) Poczatek.Add(i);
if( kod[i] == "}" ) Koniec.Add(i);
}
Następnie odpowiednie segmenty kodu wyciągniesz czytając Początek od końca i Koniec od początku :P
czyli. największy blok kodu, powiedzmy całą funkcję Main otrzymasz w taki sposób (kod jest sprawdzany od góry do dołu)
Największy_blok_kodu = kod (od Poczatek[0] do Koniec[Koniec.Count])
zaś
Najmniejszy kawałek kodu = kod( od Poczatek[Poczatek.Count] , do Koniec[0]);
coraz większe fragmenty kodu (zaczynając od najmniejszego) możesz wydobywać w taki sposób
kod ( Początek[Poczate.Cout --] , Koniec[0 ++] )
Mam nadzieję że choć w dość zagmatwany sposób ale opisałem Ci jak ja bym to zrobił.