Java中的正则表达式多线程模式

时间:2016-07-27 16:37:31

标签: java regex

文件display.props的内容,通过.xml加载

Alter User SA set password somepassword;

现在我想读取此文件并获取显示数字(20)

Xvfb Display Properties
Wed Jul 27 18:31:50 CEST 2016
DISPLAY=\:20
XAUTHORITY=/tmp/Xvfb4443942380574278711.Xauthority

然而,这场比赛和我尝试过的所有其他比赛都没有用,有什么想法吗?

2 个答案:

答案 0 :(得分:0)

使用String#replaceALl() ==>尝试正则表达式replaceAll("(?s).*DISPLAY=.*?(\\d+).*", "$1")

System.out.println(s.replaceAll("(?s).*DISPLAY=.*?(\\d+).*", "$1"));

O / P:

20

答案 1 :(得分:0)

您的代码有两个问题,首先是您使用标记为DOTALL的贪婪运算符,因此您将匹配不同的字符串(11而不是20)。您可以通过使用未授权的运算符.*?或仅删除DOTALL标志来解决此问题。

此外,第二个问题是您必须使用m.group(1)从捕获群组中抓取捕获的内容:

String xvfbPropsFile = "Xvfb Display Properties\n" +
                            "Wed Jul 27 18:31:50 CEST 2016\n" +
                            "DISPLAY=\\:20\n" +
                            "XAUTHORITY=/tmp/Xvfb4443942380574278711.Xauthority";
Pattern p = Pattern.compile("DISPLAY.*([0-9][0-9])");
Matcher m=p.matcher(xvfbPropsFile);

if (m.find()){
    System.out.println(m.group(1)); // group 1 contains 20
}

<强> IdeOne demo