我想通过使用正则表达式从QString(.html)中提取信息。我明确地想要使用正则表达式(无解析器解决方案)和类QRegularExpression(出于若干原因,例如:Reasons)。QT C++ QRegularExpression多个匹配
为简化方面,这里是一个问题的等价任务。
构筑源字符串:
<foo><bar s>INFO1.1</bar> </ qux> <peter></peter><bar e>INFO1.2
</bar><fred></ senseless></fred></ xx><lol></lol></foo><bar s>INFO2.1</bar>
</ nothing><endlessSenselessTags></endlessSenselessTags><rofl>
<bar e>INFO2.2</bar></rofl>
*注:*可能会有或多或少的相关信息和附加sensless标签。 (6相关信息例如)
寻求:
Info1.1和Info1.2和Info2.1和Info2.2(例如,在列表)
尝试
1.
QRegularExpression reA(".*<bar [es]>(.*)</bar>.*", QRegularExpression::DotMatchesEverythingOption);
- >
INFOa</bar> </ qux> <peter></peter><bar e>INFOb
</bar><fred></ senseless></fred></ xx><lol></lol></foo><bar s>INFOc</bar>
</ nothing><endlessSenselessTags></endlessSenselessTags><rofl>
<bar e>INFOd
2.
QRegularExpression reA("(.*<bar [es]>(.*)</bar>.*)*", QRegularExpression::DotMatchesEverythingOption);
- >无谓
问题: 正则表达式总是与整个字符串。 <bar s>INFO</bar><bar s>INFO</bar>
会选择第一个<bar s>
,最后一个和</bar>
。通缉是第一
与QRegExp似乎有一个解决方案,但我想用QRegularExpression做到这一点。
简单:你不使用HTML/XML的正则表达式。您应该使用DOM库。至于你的正则表达式,它正在执行它通常的贪婪匹配,所以它会匹配你的整个字符串中的FIRST'bar'和LAST'bar'。 –