使用QRegExp筛选文本

使用QRegExp筛选文本,regex,qt,Regex,Qt,我想用QRegExp过滤掉${…},这样它可以重新运行所有选定元素的QStringList: “${NAME}”将正则表达式更改为QRegularExpression rx(“(\\${.*?})” 您的第一次尝试没有成功,因为QRegExp不支持通过/…/g进行全局匹配,并且通常不符合perl。在Qt5中,您最好使用改进得多的QRegularExpression 你的第二次尝试没有成功,因为你的正则表达式太贪婪了。它正在抓取开始的花括号{直到最后一个结束的花括号} 如果您在*捕获中添加问号,您

我想用
QRegExp
过滤掉
${…}
,这样它可以重新运行所有选定元素的
QStringList


“${NAME}”将正则表达式更改为
QRegularExpression rx(“(\\${.*?})”

您的第一次尝试没有成功,因为
QRegExp
不支持通过
/…/g
进行全局匹配,并且通常不符合perl。在Qt5中,您最好使用改进得多的
QRegularExpression

你的第二次尝试没有成功,因为你的正则表达式太贪婪了。它正在抓取开始的花括号
{
直到最后一个结束的花括号
}

如果您在
*
捕获中添加问号,您将关闭贪婪,在这种情况下,它将只捕获您正在寻找的内容


不过,要小心尝试将此解决方案扩展得更远。一般来说,.

QRegExp rx(“/(\\\\${.*})/g”);是的,你是对的,这与反斜杠匹配。如果使用Qt5,你可以尝试
QRegularExpression
。它是perl兼容的,而
QRegExp
不是。我也不确定/../g是否会按照您在Qt中的想法执行
QRegularExpression
包含一个
globalMatch
功能。谢谢,但请查看我的最新答案能否将所需的输出字符串添加到问题中?你的一天是怎样的?\t\t\t是的,是吗?
QString text = "Hello ${NAME} \
        How is your ${DAY} so? \
        Bye, ${MEH} ${MEH}\
        ${MEH}";

// Regex: /(\${.*})/g
QRegExp rx("/(\\${.*})/g");
QStringList list;
int pos = 0;

while ((pos = rx.indexIn(text, pos)) != -1) {
    QString val = rx.cap(1);
    list << val;
    qDebug () << "Val: " << val;
    pos += rx.matchedLength();
}
QString text = "Hello ${NAME} \
        How is your ${DAY} so? \
        Bye, ${MEH} ${MEH}\
        ${MEH}";

QRegularExpression rx("(\\${.*})");
QRegularExpressionMatchIterator i = rx.globalMatch(text);
while (i.hasNext()) {
    QRegularExpressionMatch match = i.next();
    qDebug() << "Value: " << match.captured(0);
}