如何使用正则表达式匹配绝对值

时间:2013-11-19 22:03:06

标签: c++ regex

我在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;
 }
}

输出

!无法解读指令!

1 个答案:

答案 0 :(得分:1)

请注意,从您的代码中,您将无法匹配。字母x与正则表达式\d+不匹配。

另外,我不太确定你是否需要在管道角色前面加一个反斜杠。您可能知道,管道(|)用于分隔可能的条目:(a|b)表示a或b。

最后,因为它们是最后的管道,所以表达式匹配空字符串,这通常是一个坏主意。

我会建议这样的事情:

"load -\\|M\\((\\d+)\\)\\|"

但那不符合:

"load -|M(x)|"

您需要使用数字而不是'x',如下所示:

"load -|M(123)|"