使用regex_ *解析/ etc / passwd,非标准行为C ++

时间:2015-04-05 09:54:22

标签: c++ regex parsing etcpasswd

我们假设我在etc / passwd中有这一行:

xuser01:*:111000:201:User Name, School Info, Year:/homes/pc/xu/xuser01:/bin/ksh

我按行浏览文件。

从参数我得到的usernames / userids告诉我应该将哪些行存储到变量中。

使用regex_match和regex_search我没有得到任何结果,而当我在网上正则表达式测试人员上测试它时,它就像地狱一样。知道为什么这不起作用吗?

regExpr = "^(xuser01|xuser02)+:((.*):?)+";
if(regex_search(line, regex(regExpr)))
{ 
cout << "Boom I got you!" << endl;
}

line目前包含行读取,它遍历整个文件,并且找不到该字符串。我也使用regex_match,结果相同。

我试过的不同正则表达式:(xuser01|xuser02)+和类似的,设计为几乎100%肯定匹配(但仍然需要匹配),它都不适用于我的C ++程序,在线正则表达式测试仪上它

通知书?

提前致谢!

1 个答案:

答案 0 :(得分:1)

看起来量词+阻止了C ++获得匹配。我认为你的正则表达式是多余的,因为你的字符串中只有一个唯一数量的&#34; xuser&#34; s。

此代码正常工作,转到cout行:

string line( "xuser01:*:111000:201:User Name, School Info, Year:/homes/pc/xu/xuser01:/bin/ksh" );
regex regExpr("^(xuser01|xuser02):((.*):?)");
if(regex_search(line, regExpr))
{ 
    cout << "Boom I got you!" << endl;
}

但是,您没有说明您要查找的内容。目前,它只匹配3组:

xuser01
*:111000:201:User Name, School Info, Year:/homes/pc/xu/xuser01:/bin/ksh
*:111000:201:User Name, School Info, Year:/homes/pc/xu/xuser01:/bin/ksh