【发布时间】:2015-07-22 10:46:51
【问题描述】:
我在 Qt 上的正则表达式上有worked,我想用图像替换所有带有特定正则表达式的子字符串。
我的标签结构是<、sml、digits (one or two)和/>的组合,我的QString是draftMsg。如果我使用一次正则表达式就可以了。
例如:“hello <sml7/>”将在我的目录中更改为 hello 和带有标签 7 的照片。
这是我的代码:
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);会得到什么?? -
恐怕这个问题没有以一种可以理解的方式表达。能改一下吗?
-
我想用照片@Zeks替换所有正则表达式