3

我正在寻找一种方法来使用 C++ .NET 的正则表达式中的模式分配变量,例如

String^ speed;
String^ size;

“命令速度 = [速度] 大小 = [大小]”

现在我正在使用 IndexOf() 和 Substring() 但它非常难看

4

3 回答 3

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");

为语法错误道歉,我现在没有编译器可以测试。

于 2008-09-19T02:45:06.823 回答
2

如果我正确理解您的问题,您正在寻找捕获组。我不熟悉 .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);
}

上面的正则表达式模式中有两个捕获组,由两组括号指定。在 java 中,这些必须按数字引用,但在其他一些语言中,您可以按名称引用它们。

于 2008-09-19T02:57:37.760 回答
0

如果将所有变量放在一个类中,则可以使用反射来迭代其字段,获取它们的名称和值并将它们插入到字符串中。

给定一个名为 InputArgs 的类的实例:

foreach (FieldInfo f in typeof(InputArgs).GetFields()) {
    string = Regex.replace("\\[" + f.Name + "\\]",
        f.GetValue(InputArgs).ToString());
}
于 2008-09-19T02:20:47.850 回答