正则表达式在myregexp.com中匹配,但在Java中不匹配

时间:2014-07-08 09:08:04

标签: java regex

这是查找会话ID的正则表达式:“(?< =())([0-9] *)(?=(。* ABC。 DEEP。 [1- 9] s))“和输出是:

    ID     TYPE    USER                            IDLE

    63494  ABC     DEEP                            3 s
 -> 70403  ABC     DEEAP                           0 s
    82446  ABC     DEEOP                           52 min 27 s

在myregexp.com/signedJar.html中,这个正则表达式正常。但是当我尝试使用Java时,它无法获得输出。请找到代码段:

    FrameworkControls.regularExpressionPattern = Pattern.compile("(?<=( ))([0-9]*)(?=(.*ABC.*DEEP.*[1-9] s))");
    String deepak = "\n" +
            "\n" +
            "    ID     TYPE    USER                            IDLE\n" +
            "\n" +
            "    63494  ABC     DEEP                            3 s\n" +
            " -> 70403  ABC     DEEAP                           0 s\n" +
            "    82446  ABC     DEEOP                           52 min 27 s\n";

    FrameworkControls.regularExpressionMatcher = FrameworkControls.regularExpressionPattern.matcher(deepak);


    if (FrameworkControls.regularExpressionMatcher.find()) {
        String h = FrameworkControls.regularExpressionMatcher.group().trim();
        System.err.println(h);
    }

“FrameworkControls.regularExpressionMatcher.find()”返回true。但是h变量总是空的。任何人都可以告诉我,我可能做错了。

预期产出:63494

2 个答案:

答案 0 :(得分:0)

我认为您正在尝试打印USER DEEPAK的ID。如果是,那么您的代码将是,

Pattern p = Pattern.compile("(?<= )[0-9]+(?=\\s*ABC\\s*DEEP\\s*[0-9]\\s*s)");
Matcher m = p.matcher(deepak);
while (m.find()) {
System.out.println(m.group());
}

IDEONE

答案 1 :(得分:0)

我会使用以下表达式:

"^\\s+(\\d+)\\s+(\\w+)\\s+(\\w+).+\$"

然后

group(1) is ID
group(2) is TYPE
group(3) is USER

表达非贪婪,因此如果您不需要,可以删除最后两组。