正则表达式必须以逗号结尾

时间:2012-03-12 02:11:58

标签: .net regex c#-4.0 mips

我正在尝试解析传入的指令。我想使用正则表达式来验证每个子字符串。 如何确保字符串以逗号结尾?我的内存正则(mips)也无效。

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 个答案:

答案 0 :(得分:2)

我不确定你用以逗号结尾的字符串是什么意思。据我所知,你可以写@"\$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 :(得分:1)

此表达式可能有效:

  

,$