我在Qt上的正则表达式上worked,我想用图像替换所有具有特定正则表达式的子字符串。
我的代码结构是const int i = 1776;
const float f = i;
,<
,sml
和digits (one or two)
的组合,我的QString是/>
。如果我使用正则表达式,它将起作用。
例如:“ hello draftMsg
”将在我的目录中更改为hello和带有标签7的照片。
这是我的代码:
<sml7/>
实际上,当我写下字符串时,它会被错误地替换:“ 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);
}
”。它将用标签7替换两个标签到图像。
我搜索了一下,发现it。我试图使用captureCount()来保持正则表达式的数字并使用它。
我已经创建了这个功能:
<sml7/><sml1/>
但它给了我“1”而不是两个。
有关在我的QString上计算正则表达式的建议吗?
答案 0 :(得分:1)
Capture - 是一个字符串,与括号内的表达式匹配。在你的正则表达式<sml(\\d{1,2})/>
中只有一个括号对,所以captureCount
返回1.为了处理字符串中正则表达式的所有入口,你需要做这样的事情(例如来自Qt的帮助):
QRegExp rx("(\\d+)");
QString str = "Offsets: 12 14 99 231 7";
QStringList list;
int pos = 0;
while ((pos = rx.indexIn(str, pos)) != -1) {
list << rx.cap(1);
pos += rx.matchedLength();
}
// list: ["12", "14", "99", "231", "7"]
另外,如果你想替换字符串,最好使用QString & QString::replace ( const QRegExp & rx, const QString & after )。
<强>更新强>
我正在使用QString :: replace,如下所示: - afn
QString draftMsg = query.value(0).toString(); QRegExp RX( “”); int pos = 0; QStringList列表;而((pos = rx.indexIn(draftMsg,pos))!= -1){list&lt;&lt; rx.cap(1); pos + = rx.matchedLength(); } for(int k = 0; k&lt; list.length(); ++ k) draftMsg.replace(QRegExp(“”),“”); - afn
但它不起作用 - afn
使用你的代码。
在:"hello <sml7/><sml1/>"
出:"hello <img src=":images/smiley/7.png" width=%2 /><img src=":images/smiley/1.png" width=%2 />"
你期待得到什么?
此外,所有这些代码都可以更改为:
QString draftMsg = query.value(0).toString();
draftMsg.replace(QRegExp("<sml(\\d{1,2})/>")
, "<img src=\":images/smiley/\\1.png\" width=%2 />");