Je dois analyser une chaîne en 3 étapes. Seul le premier étage fonctionne, en 2 et 3 étapes. Matcher.groupCount() renvoie 0 - ce qui signifie qu'il n'a rien trouvé. Je testais mon regex dans un testeur en ligne et c'était très bien. Mais ici ça ne marche pas. Donc la question est peut-être que je manque quelque chose ou regex a une erreur dedans?Comment obtenir toutes les pièces correspondantes au modèle regex
String rawText = "ashjdajsdg:[requiredPartForFirstPattern]}asdassdasd";
Pattern firstPattern = Pattern.compile("(:\\[)(.*?)(\\]})");
List<String> firstList = parseContent(rawText, firstPattern);
Après l'exécution Firstlist doit contenir uniquement une valeur (dans ce cas): "requiredPartForFirstPattern" (pourrait être l'un quelconque char ou toute séquence de char).
Maintenant, j'itérer toutes les valeurs dans le Firstlist et les vérifier avec 2 motifs:
Toutes les valeurs Firstlist auront la forme: "[someText1], [someText2], [someText3]".
String rawText = "[someText1],[someText2],[someText3]";
Pattern secondPattern = Pattern.compile("(\\[([^]]*)\\])");
List<String> secondList = parseContent(rawText, secondPattern);
Après l'exécution secondList doit contenir ces valeurs (dans ce cas): "someText1", "someText2", "someText3".
Et enfin la troisième étape. Je itère toutes les valeurs dans secondList et les vérifie avec 3 pattern. Toutes les valeurs de secondList auront cette forme: "'someValue1', 'someValue2'".
String rawText = "'someValue1','someValue2'";
Pattern thirdPattern = Pattern.compile("('(.*?)')");
List<String> thirdList = parseContent(rawText, secondPattern);
Après l'exécution secondList doit contenir ces valeurs (dans ce cas): "someValue1", "someValue2".
Ma méthode parseContent:
private List<String> parseContent(String content, Pattern pattern) {
List<String> matchedList = new LinkedList<>();
Matcher matcher = pattern.matcher(content);
if (matcher.find()) {
for(int matchIndex = 0; matchIndex < matcher.groupCount(); ++matchIndex) {
matchedList.add(matcher.group(matchIndex));
}
}
return matchedList;
}
Alors, quelle est la question/problème? – CKing
Seul le premier étage fonctionne, en 2 et 3 étapes. Matcher.groupCount() renvoie 0 - ce qui signifie qu'il n'a rien trouvé. Je testais mon regex dans un testeur en ligne et c'était très bien. Mais ici ça ne marche pas. Donc la question est peut-être que je manque quelque chose ou regex a une erreur dedans? – sereGkaluv
Pouvez-vous poster ceci dans le cadre de votre question? – CKing