Присвойте переменные регулярному выражению - PullRequest
3 голосов
/ 19 сентября 2008

Я ищу метод для назначения переменных с шаблонами в регулярных выражениях с C ++ .NET что-то вроде

String^ speed;
String^ size;

"команда SPEED = [скорость] РАЗМЕР = [размер]"

Сейчас я использую IndexOf () и Substring (), но это ужасно

Ответы [ 3 ]

3 голосов
/ 19 сентября 2008
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");

Извиняюсь за синтаксические ошибки, у меня нет компилятора для тестирования прямо сейчас.

2 голосов
/ 19 сентября 2008

Если я правильно понимаю ваш вопрос, вы ищете группы захвата. Я не знаком с .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 на них нужно ссылаться по номеру, но на некоторых других языках вы можете ссылаться на них по имени.

0 голосов
/ 19 сентября 2008

Если вы поместите все переменные в класс, вы можете использовать отражение, чтобы перебрать его поля, получить их имена и значения и вставить их в строку.

Учитывая экземпляр некоторого класса с именем InputArgs:

foreach (FieldInfo f in typeof(InputArgs).GetFields()) {
    string = Regex.replace("\\[" + f.Name + "\\]",
        f.GetValue(InputArgs).ToString());
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...