我曾在Qt上工作过正则表达式,我想用图像替换特定正则表达式的所有子字符串。
我的标记结构是组合<
、sml
、数字(一或两个)
和/>
,我的QString是draftMsg
。如果我只使用正则表达式,它将起作用。
例如:" 你好<sml7/>
" 将被更改为带有标签7的照片的hello。
这是我的代码:
QRegExp rxlen("<sml(\\d{1,2})/>");
if (draftMsg.contains(rxlen))
{
QString str = rxlen.capturedTexts()[1];
int index = str.toInt();
smileyClicked(index-1);
m_messageEdit->insertHtml(QString("<img src=\":images/smiley/%1_64.png\" width=%2 />")
.arg(index, 2, 10, QLatin1Char('0')).arg(smileyWidth));
draftMsg = draftMsg.remove(rxlen);
}
实际上,当我写像这样的字符串时:hello <sml7/><sml1/>
,它会错误地替换。它将两个标签都替换为带有标签 7 的图像。
我搜索并找到了it。我尝试使用 captureCount() 来保留正则表达式的数字并使用它。
我已经创建了这个函数:
void MessageDialog::regInMessage(QString pattern, QString string)
{
QRegExp regex(pattern);
if (regex.indexIn(string) < 0) {
qDebug("Can't find a match.");
return;
}
qDebug() << regex.captureCount();
}
但它给我返回了"1"而不是两个。
有什么建议可以在我的QString上计算正则表达式吗?
qDebug() << regex.cap(0); qDebug() << regex.cap(1); qDebug() << regex.cap(2);
,你会得到什么? - Megasa3