0

你如何只返回一个被发现匹配的组?

我有这个正则表达式:

".*>(\\d+.*)\\s.*\\(.*</|>(\\d+.+)<"

当我运行时:

   Pattern p = Pattern.compile(regex);
   Matcher m = p.matcher(comparisonString);

   if(m.find() == true){
           System.out.println(m.group(1));
   }

每当匹配表达式的第二部分('OR' 运算符之后的表达式)时,都会返回 null。每当匹配辅助表达式(“OR”之后的表达式)时,如何返回匹配组?

4

1 回答 1

2

您需要使用捕获组:

Pattern pattern = Pattern.compile("(regexToMatch1)|(regexToMatch2)");
...
read in stuff here
...
Matcher matcher = pattern.matcher(yourString);
if (matcher.matches()) {
    String firstString  = matcher.group(1);
    String secondString = matcher.group(2);
}

然后扔掉你不想要的任何组。

这里有很好的例子:http: //javamex.com/tutorials/regular_expressions/capturing_groups.shtml

编辑:等等,我想我不明白你在问什么。您的组匹配,但组为空?您只需要在 matcher.group(#); 中引用第二组即可 称呼。

于 2012-04-17T21:06:50.947 回答