我有一根绳子。例如:
QString myString = "Today is Tuesday";
要求是:当用户输入一个字符串时,如果该字符串包含在myString
,那么该部分在myString
应该是粗体,并且不区分大小写(Qt::CaseInsensitive
),但格式为myString
应保留(大写字符应为大写,小写字符应为小写)。
例如:
- 用户类型:
tu
-> 今天是Tuesday
- 用户类型:
ES
-> 今天是土esday
- 用户类型:
aY
-> 托德ay是星期二ay
这是我的功能:
void myClass::setBoldForMatching( const QString &p_text )
{
QRegExp regExp( p_text, Qt::CaseInsensitive, QRegExp::RegExp );
if ( !p_text.isEmpty() )
{
if ( myString.contains( regExp ) )
{
myString = myString.replace( p_text, QString( "<b>" + p_text + "</b>" ), Qt::CaseInsensitive );
}
}
}
这个函数是错误的,因为
用户类型t
-> today is tuesday.
我需要的是Today is Tuesday
我应该如何更新我的功能?
我们可以使用不同的QString::replace()
,它接受一个QRexExp
,替换所有出现的情况。做到这一点的关键是我们需要一个捕获组为了在替换中替换原始文本,使用反向引用(\1
):
#include <QRegExp>
QString setBoldForMatching(QString haystack, const QString& needle)
{
if (needle.isEmpty()) return haystack;
const QRegExp re{"("+QRegExp::escape(needle)+")", Qt::CaseInsensitive};
return haystack.replace(re, "<b>\\1</b>");
}
Demo
#include <QDebug>
int main()
{
qInfo() << setBoldForMatching("THIS DAY (today) is Tuesday.", "Day");
}
THIS DAY (today) 是星期二day.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)