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

1 番目と 2 番目のパラメーターの型は同じでなければなりません (これらのパラメーターが反復子の場合)。たとえば、次cend()の代わりにfunction を使用できend()ます。

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