这是场景,我有这个正则表达式模式:
\"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/