所以我有一个脚本文件,其中一些变量使用#符号分配,然后是赋值运算符(=),然后是字符串。所有这一切都没有空间。有时,会有一个注释(以!符号开头)或一些额外的空格。例如:
#mat=3 !mat denotes a material number
我想使用C ++的正则表达式实用程序来提取#mat;#mat'和'。我无法弄清楚正则表达式模式。即使我有一个模式,我也不知道如何提取' #mat'和' 3'特别是从那条线。当我使用cout作为regex_search的smatch数组时,我会得到整行。
有什么建议吗?非常感谢您的帮助/建议。
答案 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编译。