我想从以下文字中获取突出显示的部分:
Linux版 3.10.49-g5796782 (d00903065 @ ubuntu)
我一直在尝试使用Java库中的Pattern和Matcher,但一直未能成功。谢谢!
修改
这是我的代码,我已经尝试了一些答案但是对于某些原因它不会有任何匹配:
String s = "Linux version 3.10.49-g5796782 (d00903065@ubuntu)";
Pattern pattern = Pattern.compile("'^\\D+([-.\\w]+)'");
Matcher matcher = pattern.matcher(s);
if (matcher.find()) {
s = matcher.group(1);
} else {
s = "no match";
}
答案 0 :(得分:1)
答案 1 :(得分:1)
虽然这不是reg exp,但如果保证在Linux version
之后出现,你可以这样做:
str.split(" ")[2]
答案 2 :(得分:1)
答案 3 :(得分:0)
因为你提到字符串总是以Linux version
开头,所以我使正则表达式更具体,Java代码将是:
public static void main (String[] args) throws java.lang.Exception
{
String pattern = "Linux version\\s*(\\d+.\\d+.\\d+-\\w+)\\s+.*";
String input = "Linux version 3.10.49-g5796782 (d00903065@ubuntu)";
Pattern p = Pattern.compile(pattern);
Matcher m = p.matcher(input);
if (m.find())
{
System.out.println("Linux version is : " + m.group(1));
}
}
答案 4 :(得分:0)
Darn,很多人都打败了我,但是因为我已经制作了正则表达式了:
import java.util.regex.Pattern;
import java.util.regex.Matcher;
class Ideone
{
public static void main (String[] args) throws java.lang.Exception
{
String s = "Linux version 3.10.49-g5796782 (d00903065@ubuntu)";
Pattern pattern = Pattern.compile("\\w+\\s+\\w+\\s+([a-z-A-Z0-9.-]+)\\s+(?:[()a-zA-Z0-9@)]+)");
Matcher matcher = pattern.matcher(s);
if (matcher.find()) {
s = matcher.group(1);
} else {
s = "no match";
}
System.out.println(s);
}
}
我匹配了整个字符串,这似乎有点过分,因为我回去看了你需要的东西。如果前两个单词中的一个中有一个数字,这将处理,这似乎不太合理。