使用 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
假设我的 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