В вашем коде есть две проблемы.
- Вам нужно всегда вызывать
matches()
или find()
перед вызовом .group()
методов для объекта соответствия. - SecondВаше регулярное выражение неправильно сгруппировано.
В настоящее время ваша группа будет давать только одно / последнее совпадение, поэтому вместо этого вам нужно заключить все выражение в группу.Правильное регулярное выражение, которое вам нужно, это,
.*\n((?:\\S+\\s+){2})(.*)
Попробуйте это Java-коды,
String pattern = ".*\n((?:\\S+\\s+){2})(.*)";
String str = "Filesystem 1MB-blocks Used Available Use% Mounted on\n" +
"/dev/sda6 72342MB 5013MB 63655MB 8% /common";
Pattern r = Pattern.compile(pattern, Pattern.DOTALL);
Matcher m = r.matcher(str);
if (m.matches()) {
System.out.println(m.group(1));
}
Prints,
/dev/sda6 72342MB