最近やる気がまったくでないわけで、それが暑さからくるかと言われたらNOで。
なにもまったく手につかないって由々しいので気分転換に映画「INCEPTION」見に行ったりね。

これ、なかなか面白かった。内容も意味もある意味「深い」上、やってることが
プログラムでいう再帰関数だなぁとか思いながら見てたよ。
各所で言われているように、見終わった後誰かと内容について議論できるような、
多少小難しいけれど濃いめなシナリオ。
でもなんというか、そういう話し相手になる人と見に行かないと意味ないんだよね・・・orz


UOからしばし離れてやる気充填のため、Cottonのソースなんかをいじくり。
今現在使っているVBScriptから借用したIRegExpでベンチをとってみると・・・遅い。
すんごい遅い。マクロの処理が重いのはこのせいかぁ。
C++で正規表現、しかもUnicodeで扱うとなると選択肢はかなり限られるわけで、
他の正規表現ライブラリを使おうと鬼車ライブラリとにらめっこしたり。
イマイチ好きになれないんだよね、外部ライブラリに頼るの。
なにかいいものないかなと探してたところ、ありましたよ。
UnicodeもOKで将来性もあって高速なのが。

std::tr1::regex君。

テンプレートで文字列をコンテナとして扱えるので臨機応変だし
C++0xの一部として盛り込まれてるので安泰だ。
Ollyさんで見る限り特殊なランタイムもいらないし、最高。
とりあえず自分用メモでも張って満足感に浸ろう。
#include <tchar.h>
#include <iostream>
#include <string>
#include <regex>
using namespace std;
using namespace std::tr1;
#ifdef _UNICODE
#define _tcout wcout
#else
#define _tcout cout
#endif

int _tmain(int argc, _TCHAR* argv[])
{
// 正規表現のコンパイルとマッチ結果用変数
basic_regex<TCHAR> rx(_T("abc(.+)abc"));
match_results<const TCHAR*> mr;

// 完全一致か確認 regex_matchをregex_searchに置き換えると部分検索になる(1ヒットのみ)
bool bMatched = regex_match(_T("abcdefabc"), mr, rx);
if (bMatched)
{
_tcout << _T("regex_match: matched_string=") << mr.str(0);
_tcout << _T(" $1=") << mr.str(1);
_tcout << _T(" $1.begin=") << mr.position(1);
_tcout << _T(" $1.end=") << mr.position(1) + mr.length(1) << endl;
}

// 置換
basic_string<TCHAR> strText, strFmt, strResult;
strText = _T("abcdefabc abcghiabc");
strFmt = _T("_$1_");
strResult = regex_replace(strText, rx, strFmt);
_tcout << _T("regex_replace: replaced_string=") << strResult << endl;

// すべての一致結果列挙
regex_iterator<basic_string<TCHAR>::const_iterator> rxi(strText.begin(), strText.end(), rx);
regex_iterator<basic_string<TCHAR>::const_iterator> rxi_end;
for(; rxi != rxi_end; ++rxi)
{
_tcout << _T("regex_iterator: matched_string=") << rxi->str(0);
_tcout << _T(" $1=") << rxi->str(1);
_tcout << _T(" $1.begin=") << rxi->position(1);
_tcout << _T(" $1.end=") << rxi->position(1) + rxi->length(1) << endl;
}

return 0;
}

2010.08.05 16:50 | プログラム | トラックバック(-) | コメント(2) |

わしいまプログラミングの勉強してて、基礎の基礎でも苦戦中。
だから記事で何を言ってるのかサッパリわからないけど、なんかすごい楽しそう!
がんばるよーほっほっー

2010.08.08 03:14 URL | ピンクメン #- [ 編集 ]

プログラミングは楽しいよね。
人の書いたソースを眺めたりいじったり、
そうしてるあいだに自分もプログラムを組めるようになってたよ。
参考書とかは買ったり読んだりしたことないのでわからないけど、
難解であってもソースそのものを読むことは
どんなに高い参考書にも勝る気がする。
がんばってマスターするんだ!

2010.08.08 07:03 URL | さいころ #- [ 編集 ]










※投稿されるコメントは管理者の承認後表示されます