C++0xリテラル

[戻る]
enakalle 2010/08/04(水) 12:13:20
VC++2008/boost regexで書いたUnicodeテキスト処理プログラムを
VC++2010に移植しようとしております。そうするとVC++2008では
問題がなかった

wregex re( L"(?<![\\\\])[\\\\]arccos" );

をVC++2010で実行すると例外が発生するようになりました。
トレースするとregexの中の正規表現をコンパイルするところ
で例外が発生しています。

文字列の中で'\'をエスケープしていますが、このリテラルの
仕様がひょっとして変わっているのではないかと思い、ぐぐ
ってみたのですがこの問題にかかわるような例が見つからなかった
のこちらに質問させていただきました。

よろしくお願いします。

enakalle 2010/08/04(水) 17:11:01
[[解決]]
どうもboost regexとC++0xの標準ライブラリでは関数のインターフェース
が同じでも、肝心の正規表現の仕様が異なっているようです。

移植はあきらめました。

επιστημη [E-Mail] [HomePage] 2010/08/05(木) 07:55:25
std::regex は正規表現を ECMAScript, basic, extended, awk, grep, egrep に差し替
えられますょ?

enakalle 2010/08/06(金) 11:39:06
情報ありがとうございます。

boost::regexはデフォルトでperl互換のようなのですが、
std::regexでperlの指定はできるでしょうか?

επιστημη [E-Mail] [HomePage] 2010/08/06(金) 23:08:02
std::regexで指定できるのは列挙したものですべてです。
このうちどれかがperlに相当するかは存じません。

enakalle 2010/08/07(土) 11:36:17
少し調べてみましたら

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は存在価値を
失わないかもしれませんね。

επιστημη [E-Mail] [HomePage] 2010/08/10(火) 06:04:14
開発チームからお返事がありました。
https://connect.microsoft.com/VisualStudioJapan/feedback/details/583162/c-hang-
up-on-using-std-wregex?wa=wsignin1.0

「例外飛ぶのは仕様です」とのこと。

enakalle 2010/08/11(水) 18:11:48
ありがとうございました。

戻り読み"(?<"が構文エラーでそれを検出しているということですね。

今は秀和システムの「Boost C++ Libraries プログラミング 第2版」や
http://alpha.sourceforge.jp/devel/boost.regex_ja.pdf
をリファレンスとして使っていますが、C++0xやTR1のサンプル付きの
わかりやすいリファレンス本を待ちたいと思います。

古いスレッドには追加発言できません。