Первое, что приходит в голову, это сделать что-то вроде этого:
(\w+)\s+<?varname>(\w+)\s*(=[\w\s\(\,)]+)?;
Это должно соответствовать созданию переменной следующим образом:
int x = 1;
double y;
Foo foo = new Foo();
Foo foo = new Foo(a,b,c);
Чтобы сделать вещи менее сложными, было бы неплохо заменить все ;
, которые не заключены в кавычки, на ;\n
. Это должно гарантировать, что у вас есть один оператор на строку.
Предоставленное регулярное выражение, помимо попытки сопоставить создание переменной, также помещает имя переменной в группу с именем varname
, к которой вы можете получить доступ через объект matcher
, например: String varName = matcher.group("varname");
. Чтобы увидеть, используется ли переменная, вы можете проверить, находится ли переменная справа от равенства, например:
[^=]+\s*=\s*.*?x.*;
Это должно соответствовать строкам, таким как int y = x;
и Foo foo = x + y;
Однако переменную также можно использовать в качестве параметра метода, поэтому вы можете сделать что-то вроде этого:
.*?\(.*?x.*?\).*?;
Это будет соответствовать строкам примерно так:
foo(x);
foo(a,b,c,x);
Foo foo = new Foo(a,v,x,y).createNewFoo();
Foo foo = new Foo(a,v,x,y).SOMECONSTANT;
Следует отметить, что в предоставленных регулярных выражениях x
- это просто пример имени переменной, который должен быть заменен фактическим именем переменной, которое вы сможете извлечь с помощью первого регулярного выражения.
Возможно, вы захотите взглянуть на это руководство по регулярным выражениям Oracle.