我正在尝试实现“突出显示”功能以增强我正在处理的项目中的搜索能力。它应该突出显示(应用 css 背景色跨度标签)在较大的 QString 中所有出现的搜索词。现在,要突出显示的匹配项由以下 Regexp 确定:
QRegExp reg("(\\b)(" + term + ")(\\b)|(.,:;'\"\')");
正则表达式不区分大小写,将匹配“term”的所有实例,后跟单词边界或标点符号。
现在,高亮代码是一个简单的 QString::replace API 调用:
entry=entry.replace(reg,"<span style=\"background-color: " + color + "\">" + term + "</span>");
这可行,但仍然有问题;最重要的问题是它忽略了大小写;如果匹配是“Apple”,则突出显示的术语将显示“apple”。如果匹配是句子中的第一个单词,这将是一个问题。
为了修复这个错误,我正在考虑将长 QString 分解为 QStringList 数组并搜索正则表达式一次匹配一个插槽。有没有更好/更快的方法来处理这项工作,还是我应该这样做?