我希望只获得一条线的匹配部分。我的表情看起来像:
std::wstring strPatternDat = L"DECL\\s+E6POS\\s+X[A-Za-z0-9]+=\\{X\\s-?[1-9]\\d*(\\.\\d+)+,Y\\s-?-?[1-9]\\d*(\\.\\d+)+,Z\\s-?-?[1-9]\\d*(\\.\\d+)+,A\\s-?-?[1-9]\\d*(\\.\\d+)+,B\\s-?-?[1-9]\\d*(\\.\\d+)+,C\\s-?-?[1-9]\\d*(\\.\\d+)"
我正在搜索的行:
DECL E6POS XB1={X 152.115494,Y -1553.65002,Z 1255.94604,A 162.798798,B -3.58411908,C -176.614395,S 6,T 50,E1 -4949.979,E2 0.0,E3 0.0,E4 0.0,E5 0.0,E6 0.0}
查找匹配项:
if (regex_match(line, matchesDat, expressionDat))
{
TRACE("Match found");
}
在匹配的数据匹配中我得到完全匹配的行。 但我期待只有匹配的部分
获得:
DECL E6POS XB1={X 152.115494,Y -1553.65002,Z 1255.94604,A 162.798798,B -3.58411908,C -176.614395,S 6,T 50,E1 -4949.979,E2 0.0,E3 0.0,E4 0.0,E5 0.0,E6 0.0}
期待:
DECL E6POS XB1={X 152.115494,Y -1553.65002,Z 1255.94604,A 162.798798,B -3.58411908,C -176.614395,
我怎样才能得到匹配的部分而不是整条线?
答案 0 :(得分:1)
您需要使用regex_search
然后获取匹配的值作为结果,而不是整个字符串:
std::wstring expressionDat = L"DECL\\s+E6POS\\s+X[A-Za-z0-9]+=\\{X\\s-?[1-9]\\d*(\\.\\d+)+,Y\\s-?-?[1-9]\\d*(\\.\\d+)+,Z\\s-?-?[1-9]\\d*(\\.\\d+)+,A\\s-?-?[1-9]\\d*(\\.\\d+)+,B\\s-?-?[1-9]\\d*(\\.\\d+)+,C\\s-?-?[1-9]\\d*(\\.\\d+)";
std::wstring line(L"DECL E6POS XB1={X 152.115494,Y -1553.65002,Z 1255.94604,A 162.798798,B -3.58411908,C -176.614395,S 6,T 50,E1 -4949.979,E2 0.0,E3 0.0,E4 0.0,E5 0.0,E6 0.0}");
wsmatch matchesDat;
if (std::regex_search(line, matchesDat, wregex(expressionDat)))
{
std::wcout << L"Match found: " + matchesDat.str() << "\nSuffix: " << matchesDat.suffix().str();
}
matchesDat.suffix()
将在匹配后输出字符串的其余部分。