CAtlRegExpの使用方法について – プログラミング – Home

CAtlRegExpの使用方法について
 
通知
すべてクリア

CAtlRegExpの使用方法について


You太郎
 You太郎
(@You太郎)
ゲスト
結合: 20年前
投稿: 2
Topic starter  

CAtlRegExpを使用して置換処理を行いたいのですが、
Match後にどのように処理を行えばよいのかわかりません。

GetMatch関数を使用し
一致グループの先頭を指すように設定されたポインタや
一致グループの末尾を指すように設定されたポインタを
取得しても、どのようにして有効利用すればよいのかわかりません。
せめて、一致グループの先頭を指すように設定されたポインタが
何番目の文字なのかがわかれば置換処理ができそうな気がするのですが、
そのような関数も見当たりませんでした。

よろしくお願いします。


引用解決済
トピックタグ
επιστημη
 επιστημη
(@επιστημη)
ゲスト
結合: 21年前
投稿: 600
 

なにが問題なのか理解できません。

マッチした箇所のポインタが得られたなら、それから文字列先頭のポインタを引けば
マッチした箇所が何文字目であったかわかりますけど。


返信引用
alt
 alt
(@alt)
ゲスト
結合: 20年前
投稿: 1
 

int _tmain(int argc, _TCHAR* argv[])
{
std::basic_string<TCHAR> str(_T(Hello World!));
std::basic_string<TCHAR> strRep(_T(Kitty));
LPCTSTR pstr = str.c_str();

CAtlRegExp<> re;
CAtlREMatchContext<> mc;
CAtlREMatchContext<>::MatchGroup mg;

if (re.Parse(_T({W[^!]*})) != REPARSE_ERROR_OK)
return 1;
if (!re.Match(pstr, &mc) || mc.m_uNumGroups == 0)
return 1;
mc.GetMatch(0, &mg);

str.replace(mg.szStart - pstr, mg.szEnd - mg.szStart, strRep);

_putts(str.c_str());

return 0;
}

#いまだにVC++6.0がメインなので CAtlRegExp なんて初めて知りました。
#便利そうですね。


返信引用
You太郎
 You太郎
(@You太郎)
ゲスト
結合: 20年前
投稿: 2
Topic starter  

マッチした箇所のポインタから、文字列先頭のポインタを引いて
何番目か調べることができました。
ありがとうございます。

話が少しずれますが、
今現在、altさんがやられているように置換にCStringを使用しているのですが、
置換用のクラスはないのでしょうか?
もう少し簡単にできる方法があるのか調査中です。


返信引用
επιστημη
 επιστημη
(@επιστημη)
ゲスト
結合: 21年前
投稿: 600
 

> 今現在、altさんがやられているように置換にCStringを使用しているのですが、
> 置換用のクラスはないのでしょうか?

std::stirng ではダメなの? なぜ?


返信引用
RAPT
 RAPT
(@RAPT)
ゲスト
結合: 22年前
投稿: 310
 

boost::regex_replace()


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました