使用java正则表达式模式获取部分匹配字符串

使用java正则表达式模式获取部分匹配字符串,java,regex,Java,Regex,我有一个模式如下 Sentence = "@502348@502002662[000861@10"; Pattern = "^@(\\d{6})@*(\\d{9})\\[(\\d{6})@(\\d{2})"; Matcher regexMatcher = regexPattern.matcher(Sentence); if (regexMatcher.find()) str1= regexMatcher.group(1); str2 = regexMatche

我有一个模式如下

Sentence = "@502348@502002662[000861@10";
Pattern = "^@(\\d{6})@*(\\d{9})\\[(\\d{6})@(\\d{2})";

Matcher regexMatcher = regexPattern.matcher(Sentence);
    if (regexMatcher.find()) 
      str1= regexMatcher.group(1);
      str2 = regexMatcher.group(2);
      str3 = regexMatcher.group(3);
      str4 = regexMatcher.group(4);
    }
如果句子适当匹配,上面的一个就可以了。但我的要求是,如果模式不匹配,应该返回部分结果

例如,如果句子=”@114142@000017000[“然后我想得到str1和str2


谢谢

您可以使用“使最后一部分可选”:

^@(\\d{6})@*(\\d{9})(?:\\[(\\d{6})@(\\d{2}))?

我不确定这是否是你正在寻找的,但你可以尝试类似的东西

^@(\\d{6})(?:@*(\\d{9})(?:\\[(\\d{6})(?:@(\\d{2}))?)?)?
这使得

@xxxxxx@xxxxxxxxx[xxxxxx@xx
       ^^^^^^^^^^^^^^^^^^^^ - optional
                 ^^^^^^^^^^ - optional
                         ^^ - optional