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

标签 c++ regex

我在 C++ 的正则表达式中遇到绝对值问题。这就是我所拥有的模式:

std::tr1::regex loadAbsNM("load -|M\\((\\d+)\\)|");    // load -|M(x)|

我正在尝试使用 std::tr1::regex_match( IR, result, loadNM ) 进行匹配。但它没有匹配任何东西,即使它应该匹配。

我正在使用 Visual Stuido 2010 编译器

程序的简化版本(上面包括 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;
 }
}

产出产出

!无法解码指令!

最佳答案

请注意,根据您的代码,您不会找到匹配项。字母 x 与正则表达式 \d+ 不匹配。

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

最后,由于它们的末尾是竖线,所以表达式匹配空字符串,这通常是个坏主意。

我会建议这样的事情:

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

但这不匹配:

"load -|M(x)|"

您需要使用数字而不是“x”,如:

"load -|M(123)|"

关于c++ - 如何使用正则表达式匹配绝对值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20083019/

相关文章:

c++ - 从 C++ 中的 char* 获取奇怪的返回值

c++ - 为什么通过 weak_ptr 调用这么慢?

c++ - 如何在 vector 中存储不同类型的对象

javascript - 删除 url 参数的正则表达式

regex - 正则表达式中可选的尾部斜杠

regex - 指数正则表达式问题

c++ - 在 #define 宏中创建一个实例

javascript - 替换字符串中的数字

java - 替换字符串中的连续字符

c++ - 使用结构类型转换的有趣行为