- - PR -
CAtlRegExpで正規表現
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2004-07-17 10:49
正規表現を行うためにVisual C++.NETのATL Serverに
入っているCAtlRegExpを使ってみたのですが、 日本語を扱おうとすると例外が発生してうまく実行できません。 以下は、MSDNにあるCAtlRegExpのコード例を参考にして Visual C++.NETで書いたコードです。 CAtlRegExp<> re; CAtlREMatchContext<> mc; re.Parse("[abc]"); if(re.Match("aiueo", &mc)) { //ヒットしたときの処理 } とすると、aがヒットして検索が成功しますが、 CAtlRegExp<> re; CAtlREMatchContext<> mc; re.Parse("[あか]"); if(re.Match("あaいiうuえeおo", &mc)) { //ヒットしたときの処理 } だと、atlrx.h内のMatch関数 case RE_RANGE: { if (*sz == '\0') { ip = (size_t) pContext->Pop(); break; } unsigned char *pBits = (unsigned char *) (&m_Instructions[ip]+1); size_t u = (size_t) *sz; if (pBits[u >> 3] & 1 << (u & 0x7)) //エラー位置 { ip += InstructionsPerRangeBitField(); ip++; sz = CharTraits::Next(sz); } else { ip = (size_t) pContext->Pop(); } } break; で、止まってしまうのです。アルファベットのみだと成功して、 カナ混じりだと例外が発生するというのは多分、デフォルトで CAtlRegExpが全角文字に対応していないからと思われますが、 どう対処してよいか分かりません。 CAtlRegExpで日本語が扱える良い方法はないでしょうか? |
1