TOM模型的ITextRange::FindText()方法如何进行正则表达式查找

manbaum 2008-05-13 01:50:02
RichEdit 的底层实现了微软的TOM模型,其中接口ITextRange中有如下方法:

STDMETHODIMP FindText(
BSTR bstr,
long Count,
long Flags,
long *pLength
);

Flags governing comparisons. It can be 0 (the default) or any combination of the following values. tomMatchWord 2 Matches whole words.
tomMatchCase 4 Matches case.
tomMatchPattern 8 Matches regular expressions.

MSDN中的说明如上。按说明,当Flags取值为tomMatchPattern常量,也就是数值8时,可以匹配正则表达式。但我在代码里用正则表达式查找总是查不到内容,不用正则表达式时正常。代码如下:

CString strFind(_T("[a-z]{1,}")); // 这个查不到
// CString strFind(_T("abcde")); // 换用这个可以查到
HRESULT hr = S_FALSE;
BSTR bstrFind = strFind.AllocSysString();
long nLength = 0;
TRACE1("--- begin search: %s\n", strFind);
while (true)
{
hr = pRange->FindText(bstrFind, tomForward, 8, &nLength);
TRACE2(" fail=%d, length=%d\n", FAILED(hr), nLength);
if (FAILED(hr) || !nLength) break;
// ProcessRange(pRange); 查到,则做处理
}
TRACE1("--- end search: %s\n", strFind);

哪位大侠对TOM有研究,请指教。多谢!!
...全文
157 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
manbaum 2008-05-16
  • 打赏
  • 举报
回复
看来没人回答啊。卡卡!高手都不关注。
Eleven 2008-05-14
  • 打赏
  • 举报
回复
up
manbaum 2008-05-13
  • 打赏
  • 举报
回复
看看其他人有没有点其他提示~
jameshooo 2008-05-13
  • 打赏
  • 举报
回复
我经常碰到这种网上也难以找到答案的问题,我也没试过你的问题,继续找答案吧,或者找替代方案
manbaum 2008-05-13
  • 打赏
  • 举报
回复
我也怀疑可能是正则表达式语法的问题,但没有找到这个方法所使用的正则表达式语法的任何相关说明。TOM的说明里大量例子提到WORD,TOM说明里的例子大部分是VBA的。而且此方法的说明里也说支持类似WORD里的特殊字符的语法,比如用 ^p 表示段落标记,即使如此,我用 strFind= _T("^p") 做查找,还是查不到结果,方法调用返回后,nLength 值为0,表示无匹配。

我甚至怀疑微软是不是在这个方法上没有实现正则表达式查找。所以想问问有没有用过这个的,或者对这个比较了解的,给个提示。我在google里搜ITextRange::FindText,只搜到可怜4页,而且80%是重复的,没有可用信息。
jameshooo 2008-05-13
  • 打赏
  • 举报
回复
你得再研究一下它支持的正则表达式的格式和语法,微软的东东经常不符合规范,就像ATL提供的正则表达式封装类使用的是自定义语法一样。

3,248

社区成员

发帖
与我相关
我的任务
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
  • ATL/ActiveX/COM社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧