0

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

建议?

提前致谢!

4

1 回答 1

1

看起来量词+正在阻止 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
于 2015-04-05T10:06:10.377 回答