Pamiętamy: Jeśli chcemy użyć znaku używanego przez regex (np. nawias) jako np. wyszukiwany znak, a nie część funkcyjna wyrażenia, to stawiamy przed nim \
(a ponieważ sam znak \
nie może wystąpić, to np. w Javie w jego miejscu podamy \\
.
Krótko mówiąc, if.(.)
znajdzie ci wszystko, co składa się z if
i dwóch znaków, bo nawiasy działają jako określenie można by rzec zakresu. Nie potrafię tego wyjaśnić. Bardziej "poprawnym" jest if.\(.\)
.
if.\(.\)
na moje oko pozwala tylko na jeden znak wewnątrz nawiasu. No i, jeśli nawias będzie pusty, wtedy w miejsce tej drugiej kropki zostanie użyty nawias zamykający, a wtedy klapa, bo drugi nawias znajdzie dopiero w drugim ifie.
if.\(.*\)
już może lepiej działać, bo pozwoli na dowolną ilość znaków wewnątrz nawiasów, ale wtedy znajdzie ostatni nawias zamykający w pliku i wszystko między if'em a tym znakiem będzie w tym zawarte. Znowu źle.
if.\([^\)]*\)
z kolei zadziała "blisko poprawności" - pozwoli na umieszczenie wewnątrz nawiasu wszystkich znaków z wyjątkiem nawiasu domykającego. Problem jednak zaczyna się, gdy w warunku chcemy zastosować nawiasy, np.
if ((cos == cos2) && (cos != cos3))
Wtedy skończy na if ((cos == cos2
, bo później jest nawias zamykający.
Z kolei po kilku minutach szukania znalazłem coś takiego w problemie nawiasów w nawiasie:
That is not possible with regular expressions since regular expressions can only match regular languages and the one you are trying to parse is context-free and not regular
Innymi słowy, na nic ci się regex nie przyda.