1

重複の可能性:
c++11正規表現との一致はありません

私はC++11をカバーするこの本を読んでいて、正規表現について説明している章に行きました。グループを参照する必要があるときはいつでも、グループ化と\ 1の参照に関する部分を取得するまで、すべてが正常に機能していました。私のコードは完全にうまくコンパイルされます:

#include <iostream>
#include <regex>
#include <string>
int main()
{
     try
     {


           regex r1("<(.*)>.*</\\1>");
           bool found = regex_match(string("<tag>value</tag>"),r1);
           cout << "Does the string match:        ";
           cout << boolalpha << found << '\n';
     }catch( exception e)
     {
        cout << e.what() << '\n';
     }

     return 0;
}

ただし、セグメンテーション違反(コアダンプ)メッセージが表示されます。この小さなスニペットは本から直接使用されたので、これが間違っていることは非常に疑わしいです。注:私は-std = c++0xを使用してコンパイルします。注:Ubuntu12.04でCode::Blocksを使用しています

どんな助けでも大歓迎です!ありがとう!

4

1 に答える 1

3

libstdc++の正規表現の実装は非常に不完全です。

http://gcc.gnu.org/onlinedocs/libstdc++/manual/status.html#status.iso.2011

セクション28、正規表現に進んでください。libstdc ++を使用している場合(ubuntuを使用しているのでほぼ確実です)、まだ正規表現を使用することはできません。

それ以外の点では、C ++11用のg++のツールチェーンは非常に堅固であるため、これは残念です。

おそらくこれにはブーストを使用するか、別の正規表現ライブラリを使用する必要があります。または、clang(およびclangのライブラリ)またはMSVC(およびそれらのライブラリ)に切り替えます。

于 2012-11-01T01:12:06.053 に答える