- PR -

CAtlRegExpで正規表現

1
投稿者投稿内容
sanrai
会議室デビュー日: 2002/02/08
投稿数: 14
投稿日時: 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

スキルアップ/キャリアアップ(JOB@IT)