java中的正则表达式保留丢失的数据

java中的正则表达式保留丢失的数据,java,android,regex,Java,Android,Regex,下面是一个场景,我有一个正则表达式模式: \"category\",([0-9]+)\n(\"subcategory\",[0-9]+\n)* 此模式应与以下数据匹配: "category",1 "subcategory",1 "subcategory",2 "subcategory",3 "category",2 "subcategory",1 "subcategory",2 "subcategory",3 我使用以下正则表达式函数: public static List<Strin

下面是一个场景,我有一个正则表达式模式:

\"category\",([0-9]+)\n(\"subcategory\",[0-9]+\n)*
此模式应与以下数据匹配:

"category",1
"subcategory",1
"subcategory",2
"subcategory",3
"category",2
"subcategory",1
"subcategory",2
"subcategory",3
我使用以下正则表达式函数:

public static List<String> regexFindMultiStrings(String pattern, String input) {
    Pattern p = Pattern.compile(pattern, Pattern.CASE_INSENSITIVE);
    Matcher m = p.matcher(input);
    List<String> data = new ArrayList<String>() ;

    while (m.find()) 
    {

         for (int i = 0; i <= m.groupCount(); i++) 
         {
             data.add(m.group(i));
             //Log.e("Array", m.group(i));
         }
    }
    return data;
}
我不是在寻找如何获取所有数据,比如:

1
"subcategory",1
"subcategory",2
"subcategory",3
2
"subcategory",1
"subcategory",2
"subcategory",3

缺少一对括号:

\"category\",([0-9]+)\n((\"subcategory\",[0-9]+\n)*)
问题在于,您不能期望捕获同一组的多个匹配项

(可选)您可以使内部组不捕获:

\"category\",([0-9]+)\n((?:\"subcategory\",[0-9]+\n)*)

同样的问题是,如果我使用regexpal或任何其他regex工具,我会得到所有匹配的字符串,但使用java,我只会得到主类别和第一个子类别。这是一个奇怪的行为:\See仍然得到相同的结果:\n for循环应该以
I=1
而不是0开始。尝试使用
\“category\”,(\\d+)\n((\“subcategory\”,\\d+\n)*)
@BheshGurung-同样的东西。我得到了同样的结果
\"category\",([0-9]+)\n((?:\"subcategory\",[0-9]+\n)*)