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