Regex match last index

Regex match last index - Java - Programmation

Marsh Posté le 12-11-2009 à 12:17:43    

Bonjour,  
 
J'utilise les Pattern et Matcher JAVA pour comparer des chaines de caractères à une expression régulière.  
En cas d'erreur dans la chaîne d'entrée (non correspondance) je voudrais simplement obtenir l'index du dernier caractère ayant matché l'expression, pour trouver le caractère posant problème dans la chaîne.  
 
Je ne sais pas si la question a déjà été posée qqpart, mais je ne sais pas comment obtenir cette valeur : en fait il s'agit des attributs 'last' et 'oldlast' de l'objet Matcher mais ils sont inaccessibles directement.  
Et lorsque la méthode end() est appelée alors que le résultat ne matche pas, l'attribut first est à -1 est une IllegalStateException est lancée  :pfff:  
 
Quelqu'un a-t-il une idée du moyen de procéder pour obtenir cette valeur ?
 
Merci!

Reply

Marsh Posté le 12-11-2009 à 12:17:43   

Reply

Marsh Posté le 12-11-2009 à 19:40:13    

A priori il suffit de faire:
 

Code :
  1. int endIndex = 0;
  2. while (matcher.find()) {
  3.   endIndex = matcher.end();
  4. }
  5. // Plus de correspondance, l'index de la dernière correspondance a été récupéré


Message édité par cbeyls le 12-11-2009 à 19:40:45
Reply

Marsh Posté le 13-11-2009 à 12:15:17    

Merci ! justement je viens d'essayer un truc comme ça, mais ça marche bien surtout si on utilise une expression régulière du type :  
[a-z]*
 
Si on ajoute par exemple une contrainte sur la longueur : [a-z]{2,10}
alors les index du Matcher ne sont pas initialisés si un mauvais caractère se trouve en position 0 de la chaîne à tester ...

Reply

Marsh Posté le 13-11-2009 à 13:07:09    

Tout dépend de ce que tu cherches. Une autre façon de faire est de créer une expression régulière du type:
 
[expression qui correspond, présente 0 ou 1 ou plusieurs fois]([expression inverse représentant tout ce qui ne correspond pas, présente 0 ou 1 fois])
 
alors il suffit de faire un match de cette expression à partir du début de la chaine de caractères et si la 2e partie, que l'on mettra dans une parenthèse capturante, est présente, alors on peut récupérer son index. Cet index sera la position du premier des caractères qui ne correspondent pas.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed