[C#] Probleme avec Regexp et acces base de registre

Résolu
Bomb_JacK Messages postés 6 Date d'inscription lundi 16 janvier 2006 Statut Membre Dernière intervention 16 janvier 2006 - 16 janv. 2006 à 12:10
cs_Willi Messages postés 2375 Date d'inscription jeudi 12 juillet 2001 Statut Modérateur Dernière intervention 15 décembre 2018 - 17 janv. 2006 à 11:41
Bonjour,

Je suis tout beau tout nouveau dans ce forum, je viens de me mettre au C# pour développer une petite appli sur du PocketPC et la je bloque sur un regexp.


Je souhaite récupérer la valeur d’une clé de registre puis appliquer dessus un regex pour récupérer une chaine de caractères:

Exemple : \HKEY_LOCAL_MACHINE\Software\Apps\Mon Programme

J’ai juste besoin de récupérer la chaine de caractère Mon Programme




Mon morceau de code :




Regex myregex = new Regex(@"^\HKEY_LOCAL_MACHINE\Software\Apps\([\w]+)$");

String s = (string)registryKey.Name;

Match m = NameGPS.Match(s);

lblNameSoft.Text = m.Groups[1].Value;






J’ai un joli message d’erreur:

Une exception non gérée du type "System.ArgumentException" s'est produite dans System.dll
Informations supplémentaires: analyse de "^\HKEY_LOCAL_MACHINE\Software\Apps\([\w]+)$" - Séquence d'échappement [file://H/ \\H] non reocnnue.

J'avais déjà essayé en doublant les \\ (mais en supprimant l'@ qui est sensé désespécialiser le \) mais ca ne marche pas plus...

Une petite aide est la bienvenue, merci à vous !

9 réponses

sebmafate Messages postés 4936 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 14 février 2014 37
16 janv. 2006 à 12:21
tu es à l'intérieur d'une regex... donc il essaye d'interpréter les \H \S et \A... donc faut doubler les \

de toute façon ta regex est fausse...

@"^\\HKEY_LOCAL_MACHINE\\Software\\Apps\\([\d\w\s]+)$"

Sébastien FERRAND
[MVP Visual C#]
3
Bomb_JacK Messages postés 6 Date d'inscription lundi 16 janvier 2006 Statut Membre Dernière intervention 16 janvier 2006
16 janv. 2006 à 12:30
Arf je n'avais pas pensé à mettre l'@ ET doubler les \, oki merci, le message d'erreur a bien disparu (j'en ai profiter aussipour modifier ma regexp fausse).

Cependant, si je peux abuser de ta compétence: Je n'arrive toujours pas à récuperer (du moins à afficher) la chaine de caractères récupérée (le lblNameSoftGPS reste vide), comment puis-je faire ?
0
sebmafate Messages postés 4936 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 14 février 2014 37
16 janv. 2006 à 12:52
dans ta regex, récupère le groups[1].Value

Sébastien FERRAND
[MVP Visual C#]
0
Bomb_JacK Messages postés 6 Date d'inscription lundi 16 janvier 2006 Statut Membre Dernière intervention 16 janvier 2006
16 janv. 2006 à 13:12
C'est ce que j'ai fait et ca ne marche pas :(


Regex NameGPS =
new Regex(@"^\\HKEY_LOCAL_MACHINE\\Software\Apps\\([\d\w\s])");
String s = (
string)registryKey.Name;
Match m = NameGPS.Match(s);
lblNameSoftGPS.text = m.Groups[1].Value;
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Bomb_JacK Messages postés 6 Date d'inscription lundi 16 janvier 2006 Statut Membre Dernière intervention 16 janvier 2006
16 janv. 2006 à 15:40
Bon j'avance doucement (enfin facon de parler)...

J'ai fait un code plutot lourd mais qui me permet de comprendre (une fois de plus je suis newbie en la matiere ;) ):


Regex myRegex =
new Regex(@[file://HKEY_LOCAL_MACHINE//SOFTWARE/Apps//(%5B/d/w/s%5D+)? \\HKEY_LOCAL_MACHINE\\SOFTWARE\Apps\\([\d\w\s]+)?]);

Match m = myRegex.Match(@"\\HKEY_LOCAL_MACHINE\\SOFTWARE\Apps\\POI-Warner");



if (m.Success)
{
lblRepSoftGPS.Text = "OK";
MessageBox.Show((
string)registryKey.Name);
MessageBox.Show(m.Groups[0].Value);
MessageBox.Show(m.Groups[1].Value);
MessageBox.Show(m.Groups[2].Value);
MessageBox.Show(m.Groups[3].Value);
MessageBox.Show(m.Groups[4].Value);
MessageBox.Show(m.Groups[5].Value);

}

Ce qu'il se passe: je m'attendais a avoir plusieurs MessageBox ou du moins une avec la chaine POI-Warner, et en fait, la condition if (m.Success) est bypassé car la valeur récupérée avec mon regexp est nulle (je ne sais pas si je suis très clair ans mon raisonnement).

Si quelqu'un a une petite idée ;)

Encore merci !
0
sebmafate Messages postés 4936 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 14 février 2014 37
16 janv. 2006 à 16:19
j'avais oublié le - dans la regex :)

@"^\\HKEY_LOCAL_MACHINE\\Software\\Apps\\([\d\w\s-_\.]+)$"

Sébastien FERRAND
[MVP Visual C#]
0
Bomb_JacK Messages postés 6 Date d'inscription lundi 16 janvier 2006 Statut Membre Dernière intervention 16 janvier 2006
16 janv. 2006 à 17:22
Sebastien, euh pas plus .... :( en tout cas merci de ta patience et de tes réponses !

Entre temps, il y avait une erreur syntaxique (il manquait un \ dans ma chaine de caracteres) mais pas plus.

Pour debugguer, j'ai changer le code avec un exemple trouve sur le web:


Regex myRegex = new Regex(@"^LDAP://CN=([\d\w\s]+), CN=([\d\w\s]+), DC=([\d\w\s]+), DC=([\d\w\s]+)$");
Match m = myRegex.Match(@"LDAP://CN=moderateurs, CN=pharaonix, DC=com, DC=developpez");



if (m.Success)
{
MessageBox.Show(m.Groups[1].Value);
MessageBox.Show(m.Groups[2].Value);
MessageBox.Show(m.Groups[3].Value);
MessageBox.Show(m.Groups[4].Value);
}

Et bien sur, les valeurs s'affichent bien.
Des que je remplace la chaine LDAP://.... par ma chaine a moi, paf marche plus ! :(
0
Bomb_JacK Messages postés 6 Date d'inscription lundi 16 janvier 2006 Statut Membre Dernière intervention 16 janvier 2006
16 janv. 2006 à 17:59
J'ai trouvé ce qui cloche mais pas la solution: en fait c'est encore le caractère \:
Si j'en mets dans la chaine de caractères qui passent, ca buggue. Si je l'enlève, ca marche ...

Faut donc que je trouve un moyen pour "forcer" l'antislash dans ma chaine...
0
cs_Willi Messages postés 2375 Date d'inscription jeudi 12 juillet 2001 Statut Modérateur Dernière intervention 15 décembre 2018 22
17 janv. 2006 à 11:41
Bonjour,
Bomb_Jack j'ai déjà eu le même problème que toi avec les \
Dans ma chaîne de caractères que je passé j'ai du quadruplé le \

\\\\HKEY_LOCAL_MACHINE\\\\Software\\\\Apps\\\\
0
Rejoignez-nous