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

Bomb_JacK 6 Messages postés lundi 16 janvier 2006Date d'inscription 16 janvier 2006 Dernière intervention - 16 janv. 2006 à 12:10 - Dernière réponse : cs_Willi 2381 Messages postés jeudi 12 juillet 2001Date d'inscription 13 février 2015 Dernière intervention
- 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 !
Afficher la suite 

Votre réponse

9 réponses

Meilleure réponse
sebmafate 4947 Messages postés lundi 17 février 2003Date d'inscription 14 février 2014 Dernière intervention - 16 janv. 2006 à 12:21
3
Merci
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#]

Merci sebmafate 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 93 internautes ce mois-ci

Commenter la réponse de sebmafate
Bomb_JacK 6 Messages postés lundi 16 janvier 2006Date d'inscription 16 janvier 2006 Dernière intervention - 16 janv. 2006 à 12:30
0
Merci
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 ?
Commenter la réponse de Bomb_JacK
sebmafate 4947 Messages postés lundi 17 février 2003Date d'inscription 14 février 2014 Dernière intervention - 16 janv. 2006 à 12:52
0
Merci
dans ta regex, récupère le groups[1].Value

Sébastien FERRAND
[MVP Visual C#]
Commenter la réponse de sebmafate
Bomb_JacK 6 Messages postés lundi 16 janvier 2006Date d'inscription 16 janvier 2006 Dernière intervention - 16 janv. 2006 à 13:12
0
Merci
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;
Commenter la réponse de Bomb_JacK
Bomb_JacK 6 Messages postés lundi 16 janvier 2006Date d'inscription 16 janvier 2006 Dernière intervention - 16 janv. 2006 à 15:40
0
Merci
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 !
Commenter la réponse de Bomb_JacK
sebmafate 4947 Messages postés lundi 17 février 2003Date d'inscription 14 février 2014 Dernière intervention - 16 janv. 2006 à 16:19
0
Merci
j'avais oublié le - dans la regex :)

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

Sébastien FERRAND
[MVP Visual C#]
Commenter la réponse de sebmafate
Bomb_JacK 6 Messages postés lundi 16 janvier 2006Date d'inscription 16 janvier 2006 Dernière intervention - 16 janv. 2006 à 17:22
0
Merci
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 ! :(
Commenter la réponse de Bomb_JacK
Bomb_JacK 6 Messages postés lundi 16 janvier 2006Date d'inscription 16 janvier 2006 Dernière intervention - 16 janv. 2006 à 17:59
0
Merci
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...
Commenter la réponse de Bomb_JacK
cs_Willi 2381 Messages postés jeudi 12 juillet 2001Date d'inscription 13 février 2015 Dernière intervention - 17 janv. 2006 à 11:41
0
Merci
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\\\\
Commenter la réponse de cs_Willi

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.