Zliczanie wystąpień danego słowa - regexy

0

Witam serdecznie!
Zostało mi zadane zadanie, w którym z pliku .java muszę wyliczyć wszystkie użycia instrukcji if (czyli tyko te, który działają w kodzie i nie są oznaczone jako komentarz/ nie są błędami etc.). Program mam już napisany w pełni i działa, jednakże problemem są regexy. Wykonany przeze mnie jest chyba dosyć tragiczny. Nie wyszukuje mi bowiem wszystkich użyć ifa.
Pattern mój wygląda dokładnie następująco:
Pattern p = Pattern.compile("[^\\\\]\\s"+"if"+"[\\s(]");
(jest to jeden z dziesiątek, których napisałem i który na obecną chwilę "coś" wyszukuje)

Program, który jest odpowiedzialny za ocenę wyrzucił mi zaś taki protokół błędów:

  • wyszukiwanie if - zle wyniki, gdy kod =
    {
    if (a > b) d = "wariant"; int pif; int piiif; int ifxxx; int ifc; if(a>b)if(c>d) x = 1;
    }

    ( expected 3 but was 1 )

    zmniejszenie punktacji = -3

GDY: Utworzono obiekt Finder

  • wyszukiwanie if - zle wyniki gdy instrukcja if jest w komentarzu; kod =
    {
    //if if (a>b) c = 1; /* if (a>b) c = 1; */
    }

( expected 0 but was 1 )

GDY: Utworzono obiekt Finder

  • wyszukiwanie if - zle wyniki, gdy instrukcja if jest w cudzyslowie; kod =
    {
    "if (a>b) c = 1;"; "if(a)c=1;", " if (a>b) c = 1;"; " if(a)c=1;"
    }

( expected 0 but was 2 )

GDY: Utworzono obiekt Finder

  • wyszukiwanie ciągów wariant - zle wyniki, gdy kod =

if (a>b) c = 1; d = "wariantwariantwariant" //subwariant

( expected 4 but was 1 )

GDY: Utworzono obiekt Finder

  • wyszukiwanie ciągów wariant - zle wyniki, gdy kod =

if (a>b) c = 1; d = "wariant"; e= "wariant"; f = "wariant wariant";

( expected 4 but was 1 )

Piszę więc do was z prośbą o pomoc z regexem, aby działał również dla podanego przykładu.
Z góry dzięki!

@Edit: Chyba pomyliłem działy. Byłaby możliwość przeniesienia tematu do Newbie? Przepraszam za kłopot.

1

To nie jest Newbie. Wyszukanie słowa "if" zależnie od tego czy jest w komentarzu czy nie to pestka. Natomiast jeżeli Twój kod ma brać tylko ifa ze statement a nie ze zmiennych, funkcji, enumów, namespace'ów, stringów czy klas i do tego sprawdzać czy składnia jest poprawna, to chłopie.. Praktycznie chcesz napisać parser javy.

Ps: to nie jest coś co chciałbym robić wyrażeniami regularnymi.

1 użytkowników online, w tym zalogowanych: 0, gości: 1