是否可以在非捕获组上使用量词? - 正则表达式

时间:2016-03-19 17:35:18

标签: java regex

我通过 regex 抓住了一个小组,我想抓住 一切,但不是小组。 因此,组可以在字符串中的不同位置上发生多次出现。

我的第一个想法是,以消极的前瞻来解决它,但我失败了。因此我尝试了非捕获组,我也在这里。

  

(bar)(baz)foo

我想要foo。

这是我到目前为止所做的:

String input = "(bar) (baz) foo";


String matchesGroup = "((?=\\().*?\\))"; //matches (...)

// as Casimir et Hippolyte commented, I know use 
// ((?:(...))+) for the non capturing group

String matchesFoo = "((?:"+ matchesGroup +")+)\\s(.*)";

Pattern pattern = Pattern.compile(matchesFoo);  
Matcher matcher = pattern.matcher(input);

while (matcher.find()){
        System.out.println(matcher.group());
}

但根本没有捕获任何内容

  

实际:

     

预期:foo

我在正则表达式中的错在哪里?

2 个答案:

答案 0 :(得分:1)

因为你想要匹配多个(...)组,考虑可能的尾随空格并移动+来量化其中一个或多个(我将空间移动到组中,并{{1} 1}}量化整个结构)

+

demo here

答案 1 :(得分:0)

你为什么不试试这个:

String testtring = "matches matches foo";
testString = testString.replaceAll("matches", "");
System.out.println(testString);