首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用QRegExp过滤文本

使用QRegExp过滤文本
EN

Stack Overflow用户
提问于 2016-04-29 20:05:19
回答 1查看 470关注 0票数 1

我想用一个${...}过滤掉QRegExp,这样它就可以保留所有选定元素的QStringList

"${NAME}“<< "${DAY}”“<< "${MEH}”<< "${MEH}“<< "${MEH}”

但不知何故,它不起作用:

代码语言:javascript
复制
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();
}

根本没有输出?我做错什么了?

更新:

QRegularExpression可以工作,但只适用于每一行,而不是每个入口级别.想法?

代码语言:javascript
复制
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);
}

输出:

值:"${NAME} t\t\t ${DAY} so? t\tBye,${MEH}\t\t\t ${MEH}“

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-04-29 20:48:51

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

您的第一次尝试没有起作用,因为QRegExp不支持通过/.../g进行全局匹配,而且通常不兼容perl。在Qt5中,最好使用改进过的QRegularExpression

你的第二次尝试没有奏效,因为你的复仇女神太贪婪了。它抓住了开式卷曲大括号{,直到最后一个卷曲大括号}

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

但是,要小心地扩大这个解决方案的范围。一般说来,https://stackoverflow.com/questions/6751105/why-its-not-possible-to-use-regex-to-parse-html-xml-a-formal-explanation-in-la.

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36946614

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档