C++/CLI で、Regex正規表現を用いたSystem::Stringの文字列解析について勉強したのでメモ。というか、コンソールベースの、CLRプロジェクトを作成してみたので、メモ。
Stringを、char*に変換するというか、作成し直す方法もあるようだが、それでは何だか進化してるんだか退化してるんだかわからんので、まずは正攻法であるこの方法を調べました。
- 空のCLRアプリケーションを作成
「空のCLRアプリケーション」プロジェクトを作成する。main.cpp として、以下のコードを作成。 - System、及び、System::Windows::Formsコンポーネントを追加。
プロジェクトを右クリックして、「参照...」を選択、そこでSystemコンポーネントを追加する。これをやらないと、以下のソースで、System::Text:: まで打ち込んだときに、RegularExpressionという名前空間が補完されないのだ!同じようにして、System::Windows::Formsコンポーネントも追加する。でないと、MessageBox が認識されない。
#include <iostream> using namespace System; using namespace System::Text; using namespace System::Text::RegularExpressions; using namespace System::Windows::Forms; int main( array< String^ > ^args) { // 「hello, world」の表示 System::Console::WriteLine(L"hello, world."); // 文字列解析の実験 Regex^ regex; { // 「連続した数字, 連続した数字」という意味の正規表現 regex = gcnew Regex("\\d+, \\d+"); } String^ test="100, 120"; Match^ match = regex->Match( test ); Console::WriteLine( match->Value ); // メッセージボックスの実験 MessageBox::Show( "tako" ); return 0; }
その後、System::Stringを、char* に変換するこんな簡単な方法もあることを知った。
// String^ str があったとして、 char s[234]; sprintf( s, "%s", str );
嘘みたいな話だが、これが使えるのならこれでいい話だと思う。