使用java regex模式获取部分匹配字符串

时间:2014-07-29 18:08:25

标签: 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 = regexMatcher.group(2);
      str3 = regexMatcher.group(3);
      str4 = regexMatcher.group(4);
    }

如果句子恰当匹配,上面的工作正常。但我的要求是,如果模式不匹配,应返回部分结果。

例如,如果Sentence =“@ 114142 @ 000017000 [”那么我想获得str1和str2。

由于

2 个答案:

答案 0 :(得分:1)

您可以使用make last part optional:

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

RegEx Demo

答案 1 :(得分:1)

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

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

这使得

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