C ++正则表达式从脚本文件中提取变量

时间:2017-03-10 23:34:50

标签: c++ regex c++11

所以我有一个脚本文件,其中一些变量使用#符号分配,然后是赋值运算符(=),然后是字符串。所有这一切都没有空间。有时,会有一个注释(以!符号开头)或一些额外的空格。例如:

#mat=3     !mat denotes a material number

我想使用C ++的正则表达式实用程序来提取#mat;#mat'和'。我无法弄清楚正则表达式模式。即使我有一个模式,我也不知道如何提取' #mat'和' 3'特别是从那条线。当我使用cout作为regex_search的smatch数组时,我会得到整行。

有什么建议吗?非常感谢您的帮助/建议。

1 个答案:

答案 0 :(得分:0)

#include <regex>
#include <iostream>

int main()
{
    const std::string s = "#mat=3     !mat denotes a material number";
    std::regex rgx("#(\\w+)=(\\d+)");
    std::smatch match;

    if (std::regex_search(s.begin(), s.end(), match, rgx))
        std::cout  << match[1]<<"  "<<match[2]<< '\n';
}

组0代表整个正则表达式:#(\\w+)=(\\d+)

第1,2组代表正则表达式的第一个和第二个子组:(\\w+)(\\d+)

因此match[0]将返回正则表达式的第一个匹配,而match[1]将返回正则表达式的第一个子组(\\w+)match[2]将返回正则表达式的第二个子组这是(\\d+)

\\d+表示匹配,直到字中最后一次出现数字。

输出为mat 3

使用c ++ 14编译。