STLで正規表現

※OLE2T が実行されるたびに、スタック領域が消費されるのでループ内での使用や、非常に大きな文字列の使用は避けてね!

#include <regex>
#include <string>
#include <iostream>


.....

// パーサー
LPTSTR p_json = OLE2T(json);

// strtok "}"で区切り
LPTSTR p_tp;
LPTSTR p_next;
p_tp = _tcstok_s(p_json,_T("}"),&p_next); // 最初の1回

while( p_tp != NULL ){

 std::wcmatch match;
 std::wregex regex(_T("\"ABC\":[0123456789]*"));
 if (std::regex_search(p_tp, match, regex))
 {
  const wchar_t* p = match.str().data();

  double dhp = _tstof(match.str().data()+_tcslen(_T("\"ABC\":")));

  std::wstring aa = match.str();


 }

 p_tp = _tcstok_s(NULL,_T("}"),&p_next);
}

どうも内部でstringの生成&コピーしてるようなのでループで数こなす処理だと速度が遅いかも。

ネタ元