我们假设我在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 ++程序,在线正则表达式测试仪上它
通知书?
提前致谢!
答案 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