我想用一个${...}过滤掉QRegExp,这样它就可以保留所有选定元素的QStringList:
"${NAME}“<< "${DAY}”“<< "${MEH}”<< "${MEH}“<< "${MEH}”
但不知何故,它不起作用:
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可以工作,但只适用于每一行,而不是每个入口级别.想法?
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}“
发布于 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.
https://stackoverflow.com/questions/36946614
复制相似问题