entrée est quelque chose comme ceci:Extrait plus Cordes avec regex dans Android
String text = "{\"definitions\":[{\"id\":\"com.sample.evaluationa\",\"name\":\"Evaluationa\",\"vers}{\"id\":\"com.sample.evaluationb\",\"name\":\"Evaluationb\",\"vers}";
Et quelques citations pour le rendre plus transparent
String definitions = "{\"definitions\":[";
String id = "{\"id\":\"";
String name = "\",\"name\":\"";
String rest = "\",\"vers}";
Mon expression régulière ressemble alors à ceci:
Pattern pattern = Pattern.compile((Pattern.quote(definitions)) +"("+ (Pattern.quote(id)) +"(.+)" +(Pattern.quote(name))+"(.+)"+(Pattern.quote(rest))+")*");
Je cherche des ID (com.sample.evaluation)
Matcher regexMatcher = pattern.matcher(text);
while (regexMatcher.find()) {
title = regexMatcher.group(2);
System.out.println(title);
System.out.println("The pattern is " + pattern.pattern());
}
Ma sortie ressemble à ceci:
com.sample.evaluationa","name":"Evaluationa","vers}{"id":"com.sample.evaluationb
The pattern is \Q{"definitions":[\E(\Q{"id":"\E(.+)\Q","name":"\E(.+)\Q","vers}\E)*
Mais je veux:
com.sample.evaluationacom.sample.evluationb
Et ce qui est aussi intéressant, mais pas de la bonne façon, après avoir changé de groupe ciblé dans le cycle
title = regexMatcher.group(2);
Je reçois juste (et bien sûr la ligne de motif)
Evaluationb
Je voudrais vraiment recommande d'utiliser un analyseur JSON. –
Sérieusement, utilisez quelque chose comme Jackson. Le chemin que vous prenez est comme construire une maison avec des cuillères. – lmortenson
Dans ce que vous seriez fourchu. –