java - Java中的正则表达式不断丢失数据

标签 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<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
2
"subcategory",1

我不是在寻找如何获取所有数据,例如:

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)*)

关于java - Java中的正则表达式不断丢失数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13785534/

相关文章:

java - 为什么我总是回复 1011 而不是 1101?

java - 将 PMD 默认规则与属性结合使用

android - 如何在android中的listview中获取所选项目的索引和字符串

javascript - RegExp 只允许单词之间有一个空格

java - 避免验证/提交 p :selectOneListbox's value completely

java - 从 JDK 1.5.0_06 迁移到 1.8.0_66 - 替换已弃用的 Java JPEG 类

java - 如何将字母数字字符串分成数字和字母

android - 键盘上方有黑线

c - 正则表达式从 C 中的字符串扫描整数和字符串

python - 提高 C++ 正则表达式替换性能