【发布时间】:2017-04-13 09:49:17
【问题描述】:
我想使用正则表达式从 QString (.html) 中提取信息。我明确地想使用正则表达式(没有解析器解决方案)和QRegularExpression 类(出于多种原因,例如:Reasons)。
为了简化方面,这里是一个问题等效任务。
构造的源字符串:
<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>
*注意:*可能会有更多或更少的信息和额外的无意义标签。 (例如 6 条信息)
通缉:
Info1.1 and Info1.2 and Info2.1 and Info2.2 (e.g. in List)
尝试
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 库。至于您的正则表达式,它会进行通常的贪婪匹配,因此它将匹配整个字符串中的第一个
bar和最后一个bar。