0

我对 C++ 中的正则表达式有点陌生。我的头有点旋转,因为它比我想象的要复杂得多。

在我的实际代码(我在下面缩写)中,我想使用迭代器在一个大字符串中从一个地方移动到另一个地方,从而提取不同的信息。现在我什至无法编译这段代码。

string email1S = "abc 31432";
smatch results;
regex mcn("([[:digit:]]+)");
string::const_iterator curPosition = email1S.begin();

if (regex_search(curPosition, email1S.end(), results, mcn))
{
    cout << "We have a match" << endl;
    cout << results[1].str() << endl;
}
curPosition += results[0].length();

该行:

if (regex_search(curPosition, email1S.end(), results, mcn))

显然不匹配 regex_search 的任何重载。错误(来自 Visual Studio 2010)被描述为好像它希望使用完全不同的重载:

Error   1   error C2780: 'bool std::tr1::regex_search(const std::basic_string<_Elem,_StTraits,_StAlloc> &,const std::tr1::basic_regex<_Elem,_RxTraits> &,std::tr1::regex_constants::match_flag_type)' : expects 3 arguments - 4 provided    

我一定错过了一些基本的东西。

4

1 回答 1

0

第一个和第二个参数的类型必须相同(如果这些参数是迭代器)。例如,您可以使用 functioncend()而不是end()

if (regex_search(curPosition, email1S.cend(), results, mcn))
于 2013-01-21T16:52:24.330 回答