Bonjour,

Je désire écrire une regexp qui me permet de vérifier si un string se terminant par un "." matche un pattern qui respecterait une règle du genre:

org.projet.A. matché
org.projet.A.xxx. matché
org.projet.A.xxx.B. non matché
org.projet.A.xxx.C. non matché
org.projet.A.xxx.B.yyy. non matché
org.projet.A.xxx.C.yyy. non matché
org.projet.A.xxx.B.yyy.A. matché
org.projet.A.xxx.B.yyy.A.zzz. matché
org.projet.A.xxx.B.yyy.A.zzz.B. non matché
org.projet.A.xxx.B.yyy.A.zzz.C. non matché
org.projet.A.xxx.B.yyy.A.zzz.B.www. non matché
org.projet.A.xxx.B.yyy.A.zzz.C.www. non matché

bref, le pattern doit matcher, si après la dernière occurrence de A (en mode greedy) on ne trouve aucune occurrence de B ou C.

J'ai essayé plusieurs patterns mais sans succès pour représenter ceci. Parmis mes essais les plus proches :

.+\.A\.(.+\.)*(?<!(B|C)\.)

En effet, avec :

org.projet.A.xxx.B.yyy.A.zzz.C.www.

Je me retrouve avec ce résultat (qui match alors qu'il ne devrait pas :

group(0) = "org.projet.A.xxx.B.yyy.A.zzz.C.www."
group(1) = "zzz.C.www."
group(2) = "null"

En effet vu que je fonctionne en mode greedy, c'est bien la dernière occurrence de A qui est détectée, mais (?<!(B|C)\.) ne me permet apparemment pas trouver B ou C dans la group 1 (je ne détecte que si le groupe se finit par B. ou C.)

Aidez moi svp j'ai passé des heures à faire des essais dans tous les sens mais sans succès...

Ah oui je désire faire ceci en une seule seule regexp... (oui sinon ce serait simple, de faire un match de \.(B|C)\. sur \1, mais je ne peux pas le faire)

Merci d'avance !