我有以下代碼。當多於一個模式合併時,Matcher.group()不返回正確的值
public class Test {
public static void main(String[] args) {
Pattern pattern = Pattern.compile("Group1 (.*), Group2=(\\[(.*)\\]|null) ,Group3=\\[(.*)\\] ,Group4=\\[(.*)\\]");
String string = "Group1 12345, Group2=null ,Group3=[group3] ,Group4=[group4]";
Matcher matcher = pattern.matcher(string);
matcher.find();
for (int i = 1; i <= matcher.groupCount(); i++) {
System.out.println(i + ": " +matcher.group(i));
}
System.out.println();
string = "Group1 12345, Group2=[group2] ,Group3=[group3] ,Group4=[group4]";
for (int i = 1; i <= matcher.groupCount(); i++) {
System.out.println(i + ": " +matcher.group(i));
}
}
}
輸出通過上面的代碼給出:
1: 12345
2: null
3: null
4: group3
5: group4
1: 12345
2: null
3: null
4: group3
5: group4
問題1:爲什麼我得到groupCount 5?是否由於多個正則表達式組合在一起(在Group2)?
問題2:我期望的輸出是
12345
null
group3
group4
12345
group2
group3
group4
我應該怎麼做才能打印我期望的方式輸出。
請幫助我正確理解程序。由於
謝謝@assylias。我很愚蠢,不會添加第二次迭代之前添加的語句。我的要求與您提供的模式完美匹配(我需要在括號內包含非空值)。但是,請您解釋模式\\ [?(。*)\\]? 我無法理解這是如何在我的示例中使用的兩個正則表達式模式的組合。謝謝 – Ravi
我在底部添加了一個解釋 – assylias
很好的解釋!感謝您的快速幫助@assylias – Ravi