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

Parsing /etc/passwd with regex_*, unstandard behavior C++

假设我的 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++ 程序和在线正则表达式测试器上都不起作用确实如此。

建议?

提前致谢!

看起来量词 + 正在阻止 C++ 获取您的匹配项。我认为它在您的正则表达式中是多余的,因为您的字符串中只有唯一数量的 "xuser"。

此代码运行良好,到达 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