2008-09-19 8 views
3

Je suis à la recherche d'une méthode pour assigner des variables avec des motifs dans les expressions régulières avec C++ .NET quelque chose commeAffecter les variables avec une expression régulière

String^ speed; 
String^ size; 

« commande SPEED = [Vitesse] SIZE = [size] "

en ce moment, j'utilise IndexOf() et substring(), mais il est assez laid

Répondre

3
String^ speed; String^ size; 
Match m; 
Regex theregex = new Regex (
    "SPEED=(?<speed>(.*?)) SIZE=(?<size>(.*?)) ", 
    RegexOptions::ExplicitCapture); 
m = theregex.Match (yourinputstring); 
if (m.Success) 
{ 
    if (m.Groups["speed"].Success) 
    speed = m.Groups["speed"].Value; 
    if (m.Groups["size"].Success) 
    size = m.Groups["size"].Value; 
} 
else 
    throw new FormatException ("Input options not recognized"); 

Toutes mes excuses pour les erreurs de syntaxe, je n'ai pas un compilateur pour tester en ce moment.

0

Si vous mettez toutes les variables dans une classe, vous pouvez utiliser la réflexion pour itérer sur ses champs, obtenir leurs noms et les valeurs et les brancher dans une chaîne.

Étant donnée une instance d'une classe nommée InputArgs:

foreach (FieldInfo f in typeof(InputArgs).GetFields()) { 
    string = Regex.replace("\\[" + f.Name + "\\]", 
     f.GetValue(InputArgs).ToString()); 
} 
2

Si je comprends bien votre question, vous recherchez des groupes de capture. Je ne suis pas familier avec le api .net, mais en Java ce devrait ressembler à:

Pattern pattern = Pattern.compile("command SPEED=(\d+) SIZE=(\d+)"); 
Matcher matcher = pattern.matcher(inputStr); 
if (matcher.find()) { 
    speed = matcher.group(1); 
    size = matcher.group(2); 
} 

Il y a deux groupes de capture dans le schéma ci-dessus, regex désignés par les deux ensembles de parenthèses. En Java, ceux-ci doivent être référencés par un numéro, mais dans d'autres langues, vous pouvez les référencer par leur nom.

Questions connexes