非捕获组正则表达式不适用于Java

Nei*_*eil 3 java regex

在线REGEX测试人员显示非捕获组被忽略但从java代码中不会被忽略.

import java.util.*;
import java.lang.*;
import java.io.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;


class Ideone
{
    public static void main (String[] args) throws java.lang.Exception
    {
        Pattern PATTERN = Pattern.compile("(?:execute: ID: \\[\\s)([0-9]*)(?:\\s\\])");
        Matcher matcher = PATTERN.matcher("controllers.pring execute: ID: [ 290825814 ] executing bean: [ strong ]");
        if (matcher.find()) {
            System.out.println(matcher.group(0));
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

产量

execute: ID: [ 290825814 ]
Run Code Online (Sandbox Code Playgroud)

预期

290825814
Run Code Online (Sandbox Code Playgroud)

anu*_*ava 8

这是错误的假设,因为matcher.group(0)总是通过您的最新findmatches方法返回完整匹配的文本.

为了让290825814你必须使用:

Pattern PATTERN = Pattern.compile("(?:execute: ID: \\[\\s)([0-9]*)(?:\\s\\])");
Matcher matcher = PATTERN.matcher("controllers.pring execute: ID: [ 290825814 ] executing bean: [ strong ]");
if (matcher.find()) {
    System.out.println(matcher.group(1)); // 290825814
}
Run Code Online (Sandbox Code Playgroud)

  • 大声笑:)真正的SO社区总是全天候活跃. (3认同)