Qt -如何在QString中定义正则表达式
Qt - how to define regular expression in QString
我在Qt正则表达式上工作过,我想用图像替换所有特定正则表达式的子字符串。
我的标签结构是<
, sml
, digits (one or two)
和/>
的组合,我的QString是draftMsg
。如果我使用正则表达式一次,它将工作。
例如:"hello <sml7/>
"将在我的目录中更改为hello and photo with label 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替换这两个标签。
我找了,我找到了。我试图使用captucount()来保留正则表达式的数字并使用它。
我创建了这个函数:
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"而不是"2"。
任何建议计数正则表达式在我的QString?
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 &之后)。
我使用QString::替换像这样:- afn
QString draftMsg = query.value(0).toString();QRegExprx (" ");Int pos = 0;QStringList列表;While ((pos = .rx。indexIn(draftMsg, pos)) != -1) {list <<rx.cap (1);pos + =rx.matchedLength ();} for (int k=0;k & lt;list.length ();+ + k)draftMsg.replace (QRegExp ("), ");——afn
但不工作- afn
使用你的代码。
In: "hello <sml7/><sml1/>"
Out: "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 />");
- 使用正则表达式regex_search在字符串中查找字符串
- 在 C++ 中使用正则表达式错误时出现问题 括号表达式中的范围无效
- C++正则表达式无限循环
- FindPackageHandleStandardArgs.cmake:137 的 CMake 错误(消息):找不到 Boost (缺少:正则表达式)(找到合适的版本"1.72.0",
- 定义有趣的宏和正则表达式在Z3 C++绑定
- 带有多个字符分隔符的正则表达式
- C++ 使用增强正则表达式库时断言崩溃
- 有人可以帮助我处理正则表达式吗?
- 标准库中的任何正则表达式语法是否支持 (?(定义)用于子模式参考?
- 我们可以重新定义正则表达式吗
- 需要支持定义正确的正则表达式
- 如何查找除使用正则表达式定义的句子之外的所有句子
- Boost正则表达式:链接时未定义的引用
- 在自定义库中使用正则表达式时出错
- 用ICU定义正则表达式负查找的边界
- 自定义类型的正则表达式
- 使用Boost c++库将正则表达式替换为自定义替换
- 在Arduino IDE中使用正则表达式库时对"longjmp"的未定义引用
- Qt -如何在QString中定义正则表达式
- 提升正则表达式定义