Coucou
[^;] => Signifie tout sauf ;
Le ^ indique que tout les caractères du groupe (entre []), sont des caractères qu'on ne veut pas.
Du coup, pour les Foreign key, hum..., c'est plus compliqué étant donné que des déclarations peuvent ce suivre, qu'elle peuvent contenir des , et qu'elle finisse par un ; ...
A mon avis il faudrait une regex avec des conditions, là ça devient chaud...
Regex regex = new Regex(@"FOREIGN KEY\([^,)]+(([,][^)]+)?)\)[^(]+\([^,)]+(([,][^)]+)?)\)(([^,);]+)?)");
Alors je vais essayer d'expliquer
FOREIGN KEY\([^,)]+(([,][^)]+)?)\)[^(]+\([^,)]+(([,][^)]+)?)\)(([^,);]+)?)
[^,)]+ : On commence par prendre une parenthèse, qu'on échappe avec '\'. Ensuite on prend tout ce qui suit sauf , et ). Le + indique qu'on veut au minimum 1 caractères.
(([,][^)]+)?) : Alors ce bloc est optionnel, grâce au '?'. On veut 1 , et tout sauf ) ayant au moins 1 caractère. Ça nous permet de récupérer tout les champs de la FK.
[^(] : Tout sauf parenthèse ouvrante, ça nous récupère le "REFERENCES".
([^,);]+)? : Et enfin on récupère la fin de FK et on arrète dès qu'on trouve une ',' ou ')' ou ';' .
Et vala
[EDIT] Il y a surement moyen de la simplifié mais là j'ai plus de neurone, (et j'ai pô le temps :p )
Partager