正则表达式仅匹配匹配中的部分

时间:2016-05-18 06:02:51

标签: regex c++11

我希望只获得一条线的匹配部分。我的表情看起来像:

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,

我怎样才能得到匹配的部分而不是整条线?

1 个答案:

答案 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();
}

enter image description here

matchesDat.suffix()将在匹配后输出字符串的其余部分。