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 :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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.