C++ .NETのような正規表現で変数にパターンを割り当てる方法を探しています
String^ speed;
String^ size;
「コマンド SPEED=[スピード] SIZE=[サイズ]」
現在、私は IndexOf() と Substring() を使用していますが、かなり醜いです
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");
構文エラーで申し訳ありません。現在、テストするコンパイラがありません。
私があなたの質問を正しく理解できれば、あなたは捕獲グループを探しています。私は .net API に詳しくありませんが、Java では次のようになります。
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);
}
上記の正規表現パターンには、2 組の括弧で指定された 2 つのキャプチャ グループがあります。Java ではこれらは番号で参照する必要がありますが、他の一部の言語では名前で参照できます。
すべての変数をクラスに入れると、リフレクションを使用してそのフィールドを反復処理し、それらの名前と値を取得して文字列にプラグインできます。
InputArgs という名前のクラスのインスタンスがあるとします。
foreach (FieldInfo f in typeof(InputArgs).GetFields()) {
string = Regex.replace("\\[" + f.Name + "\\]",
f.GetValue(InputArgs).ToString());
}