Bonjour,
j'ai un problème en utilisant les expressions régulières :
je cherche dans un texte des morceaux de phrase à l'aide d'expressions régulières.
Par exemple, je cherche des morceaux de phrases correspondant à l'expression régulière suivante :
(([A-Z][A-Za-z]+[ -]*)+) est mort à l'âge de ([0-9][0-9][0-9]?) ans
Voici un extrait de mon code :
1 2 3 4 5 6 7 8 9 10 11 12 13
|
// creation de l'objet patron
patronCourant = "(([A-Z][A-Za-z]+[ -]*)+) est mort à l'âge de ([0-9][0-9][0-9]?) ans";
patron = Pattern.compile();
detecteur = patron.matcher(phrases[i]);
idMatch = 0;
while(detecteur.find(idMatch))
{
// on recupere la partie matchee
partieMatchee = detecteur.group();
matchs.add(partieMatchee);
idMatch = detecteur.start();
} // fin while |
Tout se passe très bien tant que le texte est en minuscule.
En revanche, si je tombe sur une suive de caractères en majuscules, le programme s'éfondre complètement. Il se met à ramer et met très longtemps à rechercher la présence de l'expression régulière dans la chaîne de caractères, même si celle-ci en fait que 1000 caractères.
En mode débug, il bloque sur la ligne :
while(detecteur.find(idMatch))
Il ne s'agit pas d'une boucle infinie, il mets juste 3 ans à tester la présence de l'expression régulière dans la phrase.
Le but est de rechercher les occurrences de cette expression régulière dans des textes qui font plusieurs mégas : ce n'est donc pas envisageable, au niveau des temps de réponse, de continuer comme cela.
Quelqu'un peut-il me dire pourquoi le programme est-il si long quand il tombe sur des phrases en majuscules ?
Que puis-je faire pour résoudre ce problème ? (à notre que la casse est pour moi très importante : je ne peux donc aps passer tout le texte en minuscules)
Merci d'avance pour votre attention et pour votre aide.
Krusty.
Partager