正则表达式“或”返回一组Java

时间:2012-04-17 20:57:36

标签: java regex

如何仅返回找到匹配的群组?

我有这个正则表达式:

".*>(\\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”之后的表达式)匹配时,如何返回匹配组?

1 个答案:

答案 0 :(得分: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中引用第二组(#);调用