MSVCで正常に動作するコードは次のとおりです
std::regex r;
//r = "setdata\\(\\\"([^\\\"]*)\\\",[^\\\"]*\\\"([^\\\"]*)";
r = "setdata\\(";
また、オンラインバリデーターによっても適切に解析されます(もちろん、 \ エスケープを削除する場合)。
しかし、g++ 4.6 では regex_error がスローされます。正規表現のサポートが終了していないことはわかっているので、<regex.h> を試してみました。
char buf[1024];
regex_t regex;
//int reti = regcomp(®ex, "setdata\\(\\\"([^\\\"]*)\\\",[^\\\"]*\\\"([^\\\"]*)", 0);
int reti = regcomp(®ex, "setdata\\(", 0);
regerror(reti, ®ex, buf, 1024);
「一致しない(または\(」と報告されます
更新:ここに私が見つけたものがあります:
残念ながら、ネイティブ プラットフォームは、バグや仕様違反を含む Posix 正規表現のサポートを提供しています。これは、Linux ディストリビューションで使用される GNU C ライブラリ (GLIBC) に特に当てはまります (c) http://www.haskell.org/haskellwiki/Regex_Posix#regex-posix_Bugs
これは POSIX 正規表現ライブラリのバグの 1 つですか?
更新: コメントのおかげで、パターンを単純化しました。gcc はエスケープされた \( のペアを探しているようですが、これは正しくないようです。