Прежде всего, удалите эту точку с начала регулярного выражения, так как для соответствия ей требуется символ до private
.
Во-вторых, ваше регулярное выражение чувствительно к регистру и не соответствует значениям капитала. Либо используйте [a-zA-Z]
, либо сделайте регистр нечувствительным к регистру ((?i)
в начале IIRC).
Btw, [a-zA-Z0-9_]
будет таким же, как \w
.
Другое дело: ваше выражение также улавливает незаконные имена переменных, а также пропускает юридические. Переменные не могут начинаться с числа, но они также могут содержать знаки доллара. Таким образом, выражение имени должно быть чем-то вроде ([a-zA-Z_$][\w$]*)
, что означает, что первым символом должно быть буква, знак подчеркивания или доллар, за которым следует любое количество словных символов или знаков доллара.
Последнее примечание: в зависимости от того, что вы делаете с этими объявлениями, имейте в виду, что вам, возможно, придется проверить эти зарезервированные слова. Скорректированное выражение все равно будет соответствовать, например, "private String private"
.
Еще одно примечание: имейте в виду, что для переменной может быть больше модификаторов, чем private
. public
, protected
, static
и т. Д. - или вообще нет.
Edit:
Теперь, когда у вас есть звездочка после первой точки, это не должно быть проблемой для особого случая. Тем не менее, точка соответствует почти любому персонажу и, соответственно, соответствует fooprivate
. В зависимости от того, чего вы хотите достичь, удалите точку или добавьте \s+
после .*
.
Просто из любопытства - хотя это может помочь нам еще лучше: в чем прецедент для этого? Чего вы хотите добиться с помощью этого синтаксического анализа? – Thomas