【问题标题】:Find strings between two tags with regex in Qt在Qt中使用正则表达式查找两个标签之间的字符串
【发布时间】:2016-05-18 10:47:54
【问题描述】:

谁能帮我解决这个问题?

我有一个包含 N 个子字符串的字符串,由标签分隔,我必须获取所有子字符串。字符串就像

STARTfoo barENDSTART你好!ENDSTARTstackoverflowrulezEND

我想获取 START/END 标签之间的所有字符串,我尝试了几个正则表达式但没有成功:

(START)(.*)(END) 给了我第一个标签和最后一个标签之间的所有竞争

(START)(\w+)(END) 没有结果

代码很简单:

QString l_str "STARTfoo barENDSTARThi there!ENDSTARTstackoverflowrulezEND"; 
QRegExp rx("(START)(\w+)(END)");
QStringList list;
int pos = 0;
while ((pos = rx.indexIn(l_str, pos)) != -1)
{
    list << rx.cap(1);
    pos += rx.matchedLength();
}
qWarning() << list;

我想要一个如下结果列表:

START富吧END

START你好!END

STARTstackoverflowrulezEND

有什么帮助吗?

谢谢!

【问题讨论】:

  • QRegex 是否接受非贪婪元素,例如:START(.*?)END?
  • @Galik:不,QRegularExpression 可以。

标签: c++ regex qt parsing


【解决方案1】:

使用rx.setMinimal(true) 和.* 让它变得懒惰:

QRegExp rx("START.*END");
rx.setMinimal(true);

见QRegExp::setMinimal docs:

启用或禁用最小匹配。如果 minimal 是 false,则匹配是贪心的(最大),这是默认的。

【讨论】:

  • 请注意:由于我建议删除捕获组(全部为()),因此只需使用rx.cap(0); 访问匹配值。
猜你喜欢
  • 2012-05-19
  • 1970-01-01
  • 2019-05-19
  • 1970-01-01
  • 1970-01-01
  • 2012-05-27
  • 1970-01-01
  • 2017-12-20
  • 2017-01-02
相关资源
最近更新 更多