我在C ++中的正则表达式中遇到绝对值问题。这就是我所拥有的模式:
std::tr1::regex loadAbsNM("load -|M\\((\\d+)\\)|"); // load -|M(x)|
我正在尝试使用std::tr1::regex_match( IR, result, loadNM )
进行匹配。但它不匹配任何东西,即使它应该是。
我正在使用Visual Stuido 2010 compilier
缩短版本的程序(上面包含的是iostream和regex)
int main()
{
std::string IR = "load -|M(x)|";
std::smatch result;
std::tr1::regex loadAbsNM("load -|M\\((\\d+)\\)|");
if( std::tr1::regex_match( IR , result, loadAbsNM ) )
{
int x = 2;
std::cout << "matched!" << std::endl;
}
else
{
std::cout << "!UNABLE TO DECODE INSTRUCTION!" << std::endl;
}
}
输出
!无法解读指令!
答案 0 :(得分:1)
请注意,从您的代码中,您将无法匹配。字母x
与正则表达式\d+
不匹配。
另外,我不太确定你是否需要在管道角色前面加一个反斜杠。您可能知道,管道(|
)用于分隔可能的条目:(a|b)
表示a或b。
最后,因为它们是最后的管道,所以表达式匹配空字符串,这通常是一个坏主意。
我会建议这样的事情:
"load -\\|M\\((\\d+)\\)\\|"
但那不符合:
"load -|M(x)|"
您需要使用数字而不是'x',如下所示:
"load -|M(123)|"