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

标签 c++ regex parsing etcpasswd

<分区>

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

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

我按行浏览文件。

从参数中我得到用户名/用户 ID,告诉我应该将哪些行存储到变量中。

同时使用 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

关于c++ - 使用 regex_* 解析/etc/passwd,非标准行为 C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29456112/

相关文章:

c++ - 计算立方体/长方体的边界框/缺失点

java - 为什么java不能识别这个正则表达式?

python - 如何使用正则表达式解析角度值

java - 用 Java 解析 HTML 网页

c++ - RPM 包先决条件

c++ - sprintf_s 在 Release模式下失败,在 Debug模式下正常

C char* 数组分配

python - 将 OR 语句与 Python SLY 组合

c++ - 构建 C++ 文件 : . h 和 .cpp

Javascript 正则表达式匹配最后一次出现的字符串后的所有内容