这是我用于Java正则表达式匹配的模式和字符串。
我需要'/dev/sda6 72342MB 5013MB '
(即,非空格非whitespce空格非空格)
在一个小组中。
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);
System.out.println(m.group(1));
但是它没有达到预期。 匹配
72342MB
代替
/ dev / sda6 72342MB
谁能告诉我我要去哪里错了?
答案 0 :(得分:1)
您的代码中有两个问题。
matches()
方法之前,您需要始终调用find()
或.group()
。当前,您的小组只会给出一个/最后一场比赛,因此您需要将整个表达式包装成小组。您需要的正确正则表达式是这个
.*\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));
}
打印
/dev/sda6 72342MB