正则表达式获取内部文本

时间:2016-09-21 19:35:03

标签: java regex

我想从以下文字中获取突出显示的部分:

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"; }

5 个答案:

答案 0 :(得分:1)

你尝试过这样的事吗?

(?<=version\s)(\S+)

这是working example

答案 1 :(得分:1)

虽然这不是reg exp,但如果保证在Linux version之后出现,你可以这样做:

str.split(" ")[2]

答案 2 :(得分:1)

您可以使用:

^\D+([-.\w]+)

请参阅a demo on regex101.com 请记住双重转义Java中的反斜杠,因此它变为:

^\\D+([-.\\w]+)

并使用第一组。

答案 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);
    }
}

我匹配了整个字符串,这似乎有点过分,因为我回去看了你需要的东西。如果前两个单词中的一个中有一个数字,这将处理,这似乎不太合理。