J'essaie de tirer quelques informations de mon fichier tnsnames en utilisant regex. J'ai commencé avec le schéma suivant:Analyser tnsnames.ora en utilisant regex
MYSCHEMA *? = *?[\W\w\S\s]*\(HOST *?= *?(?<host>\w+\s?)\)\s?\(PORT *?= *?(?<port>\d+)\s?\)[\W\w\S\s]*\(SERVICE_NAME *?= *?(?<servicename>\w+)\s?\)
qui a bien fonctionné quand mon_schema était le seul schéma dans le fichier, mais quand il y a d'autres schémas ci-après mon_schema il correspond jusqu'au dernier schéma.
J'ai depuis créé un nouveau modèle:
MYSCHEMA *=\s*\(DESCRIPTION =\s*\(ADDRESS *= *\(PROTOCOL *= *TCP\)\(HOST *= *(?<host>\w+)\)\(PORT *= *(?<port>\d+)\)\)\s*\(CONNECT_DATA *=\s*(?<serverdedicated>\(SERVER *= *DEDICATED\))\s*\(SERVICE_NAME *= *(?<servicename>[\w\.]+) *\)\s*\)\s*\)
Ce modèle correspond mon_schema seulement, mais je devais ajouter tous les éléments qui apparaît dans l'entrée de mon_schema, et il ne correspond pas à MYOTHERSCHEMA si elle ne ne contient pas tous les mêmes éléments. Idéalement, je voudrais un modèle qui correspond uniquement à l'entrée MYSCHEMA, et qui capture HOST, PORT et SERVICE NAME, et éventuellement (SERVER = DEDICATED) (que je n'avais pas dans le premier modèle) à des groupes nommés.
est Ci-dessous l'échantillon tnsnames que j'ai utilisé pour les tests:
SOMESCHEMA =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = REMOTEHOST)(PORT = 1234))
)
(CONNECT_DATA = (SERVICE_NAME = REMOTE)
)
)
MYSCHEMA =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = MYHOST)(PORT = 1234))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = MYSERVICE.LOCAL)
)
)
MYOTHERSCHEMA =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = MYHOST)(PORT = 1234))
)
(CONNECT_DATA =
(SERVICE_NAME = MYSERVICE.REMOTE)
)
)
SOMEOTHERSCHEMA =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = LOCALHOST)(PORT = 1234))
)
(CONNECT_DATA =
(SERVICE_NAME = LOCAL)
)
)
duplication possible de [Tnsnames.ora parsing dans Visual C# 2008] (http: // stackoverflow.com/questions/1243022/parsing-tnsnames-ora-in-visual-c-2008) – Kobi
Regex ne fonctionne pas bien avec des parenthèses équilibrées, voir le lien dans le commentaire précédent pour une meilleure solution. – Kobi
@Kobi - Je ne peux pas justifier l'ajout d'un autre produit tiers à notre environnement de développement pour quelque chose qui peut être accompli par d'autres moyens. –