java正则表达式中的非捕获组

java正则表达式中的非捕获组,java,regex,Java,Regex,我已经写了一个代码,但它不能正常工作。在这里,您可以找到我的RegEx、作为输入的内容和作为输出的预期内容。我使用的是非捕获组,因为我想阅读文本直到得到“Bundle”单词,但我不想将其包含在捕获组中。但我不知道我做错了什么,这导致它不起作用 这是我的密码: Pattern pattern = Pattern.compile( "((Bundle\\s+Components)|(Included\\s+Components))\\s+(.*?)(?:Bundle)

我已经写了一个代码,但它不能正常工作。在这里,您可以找到我的
RegEx
、作为输入的内容和作为输出的预期内容。我使用的是非捕获组,因为我想阅读文本直到得到“Bundle”单词,但我不想将其包含在捕获组中。但我不知道我做错了什么,这导致它不起作用

这是我的密码:

Pattern pattern = Pattern.compile(
                "((Bundle\\s+Components)|(Included\\s+Components))\\s+(.*?)(?:Bundle)", Pattern.DOTALL);

        Matcher matcher = pattern.matcher(tableInformation);

        while (matcher.find()) {

            String bundleComponents = matcher.group();
            System.out.println(bundleComponents);
        }
以下是一些例子: 例1:

Bundle Components bla blah\blabla?!()\\ANY CHARACTER IS POSSIBLE HERE, EVEN LINEBREAK,blah blah
Bundle Type
例2:

 Included Components
    blah blah, like above,
    Bundle Type
我对例1的预期输出:

Bundle Components bla blah\blabla?!()\\ANY CHARACTER IS POSSIBLE HERE, EVEN LINEBREAK,blah blah
例2的预期输出:

Included Components
blah blah, like above,
 Bundle Components bla blah\blabla?!()\\ANY CHARACTER IS POSSIBLE HERE, EVEN LINEBREAK,blah blah
    Bundle Type
Included Components
blah blah, like above,
Bundle Type
例2的输出:

Included Components
blah blah, like above,
 Bundle Components bla blah\blabla?!()\\ANY CHARACTER IS POSSIBLE HERE, EVEN LINEBREAK,blah blah
    Bundle Type
Included Components
blah blah, like above,
Bundle Type
例2的输出:

Included Components
blah blah, like above,
 Bundle Components bla blah\blabla?!()\\ANY CHARACTER IS POSSIBLE HERE, EVEN LINEBREAK,blah blah
    Bundle Type
Included Components
blah blah, like above,
Bundle Type

您可以使用正向前瞻进行此操作,因为使用此方法,前瞻组内的模式不包括在匹配中:

((?:Bundle\\s+组件)|(?:Included\\s+组件))\\s+(.*?(=Bundle)


(未经测试)

在完全匹配中,您可以得到regex所说的一切,甚至是非捕获组。您需要获得适当的匹配以摆脱非捕获组。另一种解决方案是使用正向前瞻,而不是捕获组。检查下面的正则表达式。我还删除了一些不必要的(IMO)组

结果只有一个完整的匹配项

PS:在这个解决方案中,“Bundle”之前的新行符号也将被捕获