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有研究,请指教。多谢!!
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有研究,请指教。多谢!!
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货