J'ai un petit souci du quel je ne parviens pas à me sortir.
En gros, je dois récupérer les éléments d'une chaine de connexion weblogic vers oracle avec du failover etc etc.
Bref une grosse chaine avec plein d'options je pensais passer par les reg ex afin de capter les différentes informations.
Par exemple récupérer le protocole etc etc.
Après une petite analyse, j'ai à priori repéré la grammaire abstraite de ce type de chaîne :
Tout marche avec : (ITEM)
Un "item" contient un nom suivit d'un "=" et ensuite d'un ou plusieurs items ou d'une valeur
Je sais pas si c'est très clair, donc rien ne vaut mieux qu'un exemple :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 (NOM_ITEM=VALEUR_ITEM) (NOM_ITEM=(NOM_ITEM1=VALEUR1)(nOM_ITEM2=VALEUR2)) (NOM_ITEM=(NOM_ITEM3=(NOM_ITEM4=VALEUR4)))
Bref faut analyser ça.
Code : Sélectionner tout - Visualiser dans une fenêtre à part (DESCRIPTION=(SOURCE_ROUTE=YES)(FAILOVER=TRUE)(LOAD_BALANCE=OFF)(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=monadressedns1.fr)(PORT=1521))(ADDRESS=(PROTOCOL=TCP)(HOST=monadressedns2.fr)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=serviceName)(SERVER=DEDICATED)(FAILOVER_MODE=(TYPE=SESSION))))
Pour isoler le premier élément, j'ai pondu la regEx :
En gros, ça me récupère les éléments :
Code : Sélectionner tout - Visualiser dans une fenêtre à part ^\\(([a-zA-Z]*)=(.*)\\)$
DESCRIPTION
(SOURCE_ROUTE..........)
Donc le nom de l'item et la valeur.
Mais par la suite pour récupérer les éléments
(SOURCE_ROUTE=YES)(FAILOVER=TRUE)(LOAD_BALANCE=OFF)(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=monadressedns1.fr)(PORT=1521))(ADDRESS=(PROTOCOL=TCP)(HOST=monadressedns2.fr)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=serviceName)(SERVER=DEDICATED)(FAILOVER_MODE=(TYPE=SESSION)))
Je vois pas trop comment faire...
Déjà je pense que ça serait intéressant de faire une expression régulière qui récupère les couples avec une expression genre :
^(\\([a-zA-Z]*=.*\\))*$
Ce qui me permettrait de récupérer des couples
SOURCE_ROUTE=YES
FAILOVER=TRUE
LOAD_BALANCE=OFF
Mais ça marche pas, ça me ramène la chaîne entier. Sûrement dû au caractère ".", mais je suis obligé, car une value peut comporter n'importe quoi, comme une ip, ou même un autre item. Bref comemnt faire???
Ça serait déjà une avancée significative. Mais dur avec les expression régulière de récupérer ça, car elles fonctionnent au maxium de match.
Bref je suis un peu perdu![]()
Partager