我在 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/