problem w wyrażeniem regularnym w Javie

0

Chcę wykorzystać wyrażenie regularne do odnajdywania w tekście wejściowym deklaracji zmiennych, funkcji i klas. W związku z tym zbudowałem wyrażenia regularne dla :

deklaracji specyfikatora dostepu i typu:

 

        String wyrazeniespecyfikatordostepu = "(\\s*?(public|static|private|protected|final|abstrac)?(\\s+)?)";
        String wyrazeniedeklaracjitypu = "(String|Boolean|Byte|Character|Short|Integer|Long|Float|Double|Enum|boolean|byte|char|short|int|long|float|double|enum)(\\s+)?(\\[\\s*?\\])*?""; 

Wyrażenia te pojedynczo działają natomiast w połączeniu nie działają nie wiem dlaczego ?
wykorzystywałem do tego funkcję matches klasy String

        String wyrazeniedeklaracja = wyrazeniespecyfikatordostepu + wyrazeniedeklaracjatypu;
        String wyrazenie = "public String ";
        System.out.println(": " + wyrazenie.matches( wyrazeniedeklaracja));

funkcja matches działa jeśli porównywany String odpowiada całemu wyrażeniu, czy są funkcje w Javie które odnajdą w tekście wyszukiwane wyrażenie ?

1

Nie odpowiem ci teraz na pierwsze pytanie, ale co do wyszukiwania, możesz stworzyć Matchera:

Matcher m = Pattern.compile(wyrazeniedeklaracja).matcher(wyrazenie);

Teraz możesz wołać m.find(), m.group - poczytaj sobie, co to robi.
Btw, zamiast String|Boolean|Byte|Character|Short|Integer|Long|Float|Double|Enum|boolean|byte|char|short|int|long|float|double|enum
można by napisać String|[bB]oolean|[bB]yte|[sS]hort|[lL]ong|[fF]loat|[dD]ouble|[eE]num ... czy coś w ten deseń,
(\\s+)? znaczy tyle co \\s*

1

Do tworzenia parserów polecam użycie jednego z generatorów parserów:
http://java-source.net/open-source/parser-generators

Za pomocą samych wyrażeń regularnych nie da się opisać żadnego sensownego języka programowania. Potrzebna jest gramatyka bezkontekstowa.
Nie da się np. stworzyć wyrażenia regularnego, do którego pasowałyby wszystkie wyrażenia nawiasowe, np. (((((1))+((2)))))
Oczywiście można łączyć wyrażenia regularne z dodatkową logiką, ale lepiej jest napisać gramatykę języka i zlecić stworzenie parsera generatorowi.

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