Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1074 connectés 

  FORUM HardWare.fr
  Programmation
  Java

  Regex match last index

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Regex match last index

n°1939946
leon_78
Posté le 12-11-2009 à 12:17:43  profilanswer
 

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!

mood
Publicité
Posté le 12-11-2009 à 12:17:43  profilanswer
 

n°1940177
cbeyls
Hail to the King, Baby
Posté le 12-11-2009 à 19:40:13  profilanswer
 

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
n°1940358
leon_78
Posté le 13-11-2009 à 12:15:17  profilanswer
 

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 ...

n°1940371
cbeyls
Hail to the King, Baby
Posté le 13-11-2009 à 13:07:09  profilanswer
 

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.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Java

  Regex match last index

 

Sujets relatifs
probléme avec ma page d'indexProblème de regex
Index supprimé toujours en ligneRegex cherche email dans un fichier texte.
z index ne marche pas overlay toujours en arrière planRegex pour sécuriser un textarea avec balises
help pour les regex de mon .htaccessSELECT MATCH sur plusieurs colonnes
Défi -> Regex bien casse teteAide pour une Regex
Plus de sujets relatifs à : Regex match last index


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR