首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CRichEditCtrl - RegEx

CRichEditCtrl - RegEx
EN

Stack Overflow用户
提问于 2016-11-18 15:14:43
回答 1查看 74关注 0票数 0

如何在RegEx搜索中使用RichEditCtrl。

我遇到的问题是突出显示匹配正则表达式列表的第一个文本实例(正则表达式可以重复,在这种情况下,第一个正则表达式匹配第一个实例,第二个正则表达式匹配第二个,以此类推)。

由于FindText不支持regex,所以我尝试从索引0开始获取所有文本,匹配第一个正则表达式,找到匹配,然后在匹配的文本上发出FindText,突出显示匹配的索引,从匹配的结束索引和下一个正则表达式中重复搜索。

代码语言:javascript
复制
int iSearchStart = 0;
for (auto &regexString : regexStrings) {
    CString text_cstr;
    int txtLength = myRichEdit.GetTextLength();

    // I am getting an exception on second regex on the following statement
    myRichEdit.GetTextRange(iSearchStart, txtLength-iSearchStart, text_cstr);  

    string text = text_cstr;
    std::smatch match;
    std::regex regexObj(regexString);  
    //look for the first match in the text
    string matchedString;
    if (std::regex_search(text, match, regexObj)) {
        matchedString = match.str();

        FINDTEXTEX ft;
        ft.chrg.cpMin = iSearchStart;
        ft.chrg.cpMax = -1;
        //ft.lpstrText = _T(tw.c_str());
        ft.lpstrText = _T(matchedString.c_str());
        int iFound = myRichEdit.FindText(FR_DOWN | FR_MATCHCASE | FR_WHOLEWORD, &ft);
        if (iFound != -1) {
            myRichEdit.SetSel(ft.chrgText);
            CHARFORMAT2 cf;
            ::memset(&cf, 0, sizeof(cf));
            cf.cbSize = sizeof(cf);
            cf.dwMask = CFM_BACKCOLOR;
            cf.crBackColor = RGB(255, 160, 160);    // pale red
            myRichEdit.SetSelectionCharFormat(cf);
            iSearchStart = ft.chrgText.cpMax + 1;
        }
    }
}
EN

回答 1

Stack Overflow用户

发布于 2016-11-18 15:28:12

我发现了这个问题,我虽然GetTextRange的第二个param是文本的长度,但它实际上是索引的结尾。

所以如果我改变了

代码语言:javascript
复制
myRichEdit.GetTextRange(iSearchStart, txtLength-iSearchStart, text_cstr);  

代码语言:javascript
复制
myRichEdit.GetTextRange(iSearchStart, txtLength, text_cstr);  

很管用!!

我保留了用于社区的代码,以了解如何在CRichEditCtrl中使用regex。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40680469

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档