hello Regex by C++/CLI

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 );

嘘みたいな話だが、これが使えるのならこれでいい話だと思う。