Regex выделение классов | методов яп Java

Есть класс яп Java. Хочу с помощью regex грепать классы | методы из файлов .java.

public class Dog {
    private String name;
    private int age;
    protected int lol;

    public Dog(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public Dog(String name) {
        this.name = name;
        this.age = -1;
    }

    public void setName(String name) {
        this.name = name;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getName() {
        return this.name;
    }

    public int getAge() {
        return this.age;
    }

    public int humanAge() {
        return this.age > 0 ? this.age * 7 : -1;
    }

    public String toString() {
        return String.format("Name: %s | Age: %d", this.name, this.age);
    }

}

Начал писать что-то подобное, но пока не понимаю как грепнуть весь класс вместе с телом.
(public )?class [A-Za-z0-9]+ {([.*?s]+)

Пытался с флагом re.MULTILINE, но тщетно.


Ответы (1 шт):

Автор решения: icYFTL

Спасибо @VictorVosMottor . С его помощью представляю финальный ответ:

(((|public|final|abstract|private|static|protected)(\s+))?(class)(\s+)(\w+)(<.*>)?(\s+extends\s+\w+)?(<.*>)?(\s+implements\s+)?(.*)?(<.*>)?(\s*))\{$(\s.*)+\}

Или конкретнее: https://regex101.com/r/YPcJRh/1/

→ Ссылка