Regex that Will Match a Java Method Declaration

I also needed such a regular expression and came up with this solution:

(?:(?:public|private|protected|static|final|native|synchronized|abstract|transient)+\s+)+[$_\w<>\[\]\s]*\s+[\$_\w]+\([^\)]*\)?\s*\{?[^\}]*\}?

This grammar and Georgios Gousios answer have been useful to build the regex.

EDIT: Considered tharindu_DG's feedback, made groups non-capturing, improved formatting.


(public|protected|private|static|\s) +[\w\<\>\[\]]+\s+(\w+) *\([^\)]*\) *(\{?|[^;])

I think that the above regexp can match almost all possible combinations of Java method declarations, even those including generics and arrays are return arguments, which the regexp provided by the original author did not match.