我正在尝试解析传入的指令。我想使用正则表达式来验证每个子字符串。 如何确保字符串以逗号结尾?我的内存正则(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)
答案 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)
此表达式可能有效:
,$