'lut
Bon, commençons par le commencement: j'ai cherché sur le forum (et ailleurs), j'ai testé 26 milliards de trucs moi-même, mais pour le moment je galère comme un sagoin, et je ne vois pas de solution simple à mon pb - même si j'en discerne une pour le moment que je suis en train d'implémenter.
Le pb: J'ai un motif constitué de 'caracteres spéciaux' à mon application (%X où X est un chiffre), représentant chacun un type de données spécifiques, et un ensemble de chaînes desquelles je dois extraire les différentes données spécifiques en se basant sur le motif.
Ex.:
motif : "%2\\%0_%1"
une chaîne xx : "blublu\\truc_bidule"
une chaîne yy : "blabla\\trac_bidale"
résultat attendu:
pour la chaîne xx: %2 = 'blublu' - %0 = 'truc' - %1 = 'bidule'
pour la chaîne yy: %2 = 'blabla' - %0 = 'trac' - %1 = 'bidale'
---
Bon, ce à quoi je suis arrivé pour le moment:
A l'aide d'un StringTokenizer, j'ai extrait les '2', '0' et '1' du motif, et les ai rangé dans un ArrayList
Avec le Pattern "[\\p{Alnum}\\s\\p{Punct}&&[^\\\\_]]+", j'arrive à extraire blublu, truc et bidule et à les ranger dans un ArrayList
Vous me direz que tout marche bien, oui sauf que la partie [^\\\\_] est trop restrictive par rapport à 1 seul type de motif
Ex.:
même motif
une chaîne zz : "blu_blu\\truc_bidule"
Là, j'ai 4 trucs extraits: 'blu', 'blu', 'truc' et 'bidule'
J'ai aussi essayé en construisant le [^...] sur la base des caractères du motif autres que %X, donc c'est moins restrictif mais le pb est identique
Ex.:
motif : "- %2\\%0_%1"
une chaîne tt : "- blu-blu\\tr uc_bid-ule"
Le Pattern devient "[\\p{Alnum}\\s\\p{Punct}&&[^\\\\-_]]+"
Là, j'ai 5 trucs extraits: '-', 'blu-blu', 'tr', 'uc', 'bid-ule', donc c'est pas ça
...
Bon, je ne demande pas de me faire l'algo, je voudrais juste déjà savoir si ce que je veux faire est facilement faisable ou pas (je veux dire par là en qqes lignes de Matcher.find() / Matcher.group(), String.split() ou autres) ou si c'est plus complexe que ça.
Mon idée actuelle est d'extraire du motif autant de sous-motifs que de %, puis de faire coïncider chaque sous-motif sur les chaînes à tester à coup de regex.
Ex.: du motif "- %2\\%0_%1", extraire "- %2\\", "\\%0_" et "_%1"
Puis, donc avec un Matcher.find() / Matcher.group() récupérer ce qu'il me faut (éventuellement retraiter derrière, comme j'ai pas encore implémenté, y'a peutetre besoin)
Voilà, qu'en pensez-vous ? Merci d'avance
---------------
TReVoR - http://dev.arqendra.net - http://info.arqendra.net