Регулярное выражение, должно заканчиваться запятой - PullRequest
1 голос
/ 12 марта 2012

Я пытаюсь разобрать переданные инструкции. Я хочу использовать регулярное выражение для проверки каждой подстроки. Как я могу убедиться, что строка заканчивается запятой? Мое регулярное выражение для памяти (мипс) также не работает.

public static OperandType GetRegisterType(this string source)
        {
            if (Regex.IsMatch(source, @"\$t[0-9]"))
                return OperandType.Temporary; // $t0 - $t9
            if (Regex.IsMatch(source, @"\$s[0-9]"))
                return OperandType.Store; // $s0 - $s9
            if (Regex.IsMatch(source, @"\$k[0-1]"))
                return OperandType.OSReserved; // $k0 - $k1
            if (Regex.IsMatch(source, @"[-+]?\b\d+\b"))
                return OperandType.Constant;
            if (Regex.IsMatch(source, @"\$zero"))
                return OperandType.Special;
            if (Regex.IsMatch(source, @"[a-zA-Z0-9]+\b\:"))
                return OperandType.Label;
            if (Regex.IsMatch(source, @"\d+\b\(\$[s-t]\b[0-9])"))
                return OperandType.Memory;
            return OperandType.Invalid;

        }

пример загрузки из памяти

lw $t7,248($t2) 

Ответы [ 2 ]

2 голосов
/ 12 марта 2012

Я не уверен, что вы имеете в виду под строкой, заканчивающейся запятой.Насколько я могу судить, вы можете просто написать @"\$t[0-9],".

Ваше регулярное выражение памяти не соответствует, потому что у вас есть [s-t]\b[0-9].Поскольку s и t, а также от 0 до 9 - все символы слова, между ними не может быть границы слова.Также у вас есть неэкранированная закрывающая скобка.Это @"\d+\(\$[st][0-9]\)" будет работать.

Если ваш список операндов просто разделен запятыми, то разбейте строку на запятые и проверьте каждую

string command = "$t7,248($t2)";

string [] operands = command.Split(new Char [] {','});

, и ваши регулярные выражения должны быть привязаны вначало и конец, вот так

if (Regex.IsMatch(source, @"^\$t[0-9]$"))
    return OperandType.Temporary;
if (Regex.IsMatch(source, @"^\$s[0-9]$"))
    return OperandType.Store;

и т. д.

1 голос
/ 12 марта 2012

Это выражение может работать:

, $

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...