VC++2008/boost regexで書いたUnicodeテキスト処理プログラムを
VC++2010に移植しようとしております。そうするとVC++2008では
問題がなかった
wregex re( L(?<![\\\\])[\\\\]arccos );
をVC++2010で実行すると例外が発生するようになりました。
トレースするとregexの中の正規表現をコンパイルするところ
で例外が発生しています。
文字列の中で'\'をエスケープしていますが、このリテラルの
仕様がひょっとして変わっているのではないかと思い、ぐぐ
ってみたのですがこの問題にかかわるような例が見つからなかった
のこちらに質問させていただきました。
よろしくお願いします。
どうもboost regexとC++0xの標準ライブラリでは関数のインターフェース
が同じでも、肝心の正規表現の仕様が異なっているようです。
移植はあきらめました。
std::regex は正規表現を ECMAScript, basic, extended, awk, grep, egrep に差し替
えられますょ?
情報ありがとうございます。
boost::regexはデフォルトでperl互換のようなのですが、
std::regexでperlの指定はできるでしょうか?
std::regexで指定できるのは列挙したものですべてです。
このうちどれかがperlに相当するかは存じません。
少し調べてみましたら
A Proposal to add Regular Expressions to the Standard Library
http://www.open-
std.org/jtc1/sc22/wg21/docs/papers/2003/n1429.htm#syntax_discussion
Given that perl isn't standardized, the perl syntax probably isn't
a good candidate for the C++ standard.
とあります。そうするとC++0xの時代になってもboost::regexは存在価値を
失わないかもしれませんね。
開発チームからお返事がありました。
https://connect.microsoft.com/VisualStudioJapan/feedback/details/583162/c-hang-
up-on-using-std-wregex?wa=wsignin1.0
「例外飛ぶのは仕様です」とのこと。
ありがとうございました。
戻り読み(?<が構文エラーでそれを検出しているということですね。
今は秀和システムの「Boost C++ Libraries プログラミング 第2版」や
http://alpha.sourceforge.jp/devel/boost.regex_ja.pdf
をリファレンスとして使っていますが、C++0xやTR1のサンプル付きの
わかりやすいリファレンス本を待ちたいと思います。