0

MSVCで正常に動作するコードは次のとおりです

std::regex r;
//r = "setdata\\(\\\"([^\\\"]*)\\\",[^\\\"]*\\\"([^\\\"]*)";
r = "setdata\\(";

また、オンラインバリデーターによっても適切に解析されます(もちろん、 \ エスケープを削除する場合)。

しかし、g++ 4.6 では regex_error がスローされます。正規表現のサポートが終了していないことはわかっているので、<regex.h> を試してみました。

char buf[1024];
regex_t regex;
//int reti = regcomp(&regex, "setdata\\(\\\"([^\\\"]*)\\\",[^\\\"]*\\\"([^\\\"]*)", 0);
int reti = regcomp(&regex, "setdata\\(", 0);
regerror(reti, &regex, buf, 1024);

「一致しない(または\(」と報告されます

更新:ここに私が見つけたものがあります:

残念ながら、ネイティブ プラットフォームは、バグや仕様違反を含む Posix 正規表現のサポートを提供しています。これは、Linux ディストリビューションで使用される GNU C ライブラリ (GLIBC) に特に当てはまります (c) http://www.haskell.org/haskellwiki/Regex_Posix#regex-posix_Bugs

これは POSIX 正規表現ライブラリのバグの 1 つですか?

更新: コメントのおかげで、パターンを単純化しました。gcc はエスケープされた \( のペアを探しているようですが、これは正しくないようです。

4

0 に答える 0