QRegularExpression - 如何从两个<ca>标签之间提取字符串?</ca>

时间:2014-10-28 14:55:12

标签: regex qregularexpression

我正在尝试将文本放在多个标签中,如下所示:

文字档案:

Internal Auto-Configured Settings File
________________________________________
(( Do not attempt to edit it manually ))
________________________________________
# Saved certifications:
<ca>
Text which I want to extract
</ca>
...
<cert>Another text I want to extract</cert>
...

在我的代码中,我打开上一个文件并阅读其内容&amp;将其存储到QString。到目前为止,我已经完成了以下工作但没有取得任何成功:

QRegularExpression regex("<ca>(.*)</ca>", QRegularExpression::MultilineOption);
QRegularExpressionMatch match = regex.match(content);
QString ca = match.captured(1);

qDebug() << ca;
qDebug() << "\n\nDone!!";

&LT;&LT;对<cert>也做同样的事情,但我得到两个空字符串。

2 个答案:

答案 0 :(得分:0)

<ca>(.*?)<\/ca>|<cert>(.*?)<\/cert>

你可以试试这个。别忘了添加标记sDOTALL

参见演示。

http://regex101.com/r/sU3fA2/30

答案 1 :(得分:0)

使用QRegularExpression::DotMatchesEverythingOption而不是QRegularExpression::MultilineOption。问题是由于.与默认模式下的新行字符不匹配。

引用文档:

  

模式字符串中的点元字符(.)允许匹配主题字符串中的任何字符,包括换行符(通常,点与换行符不匹配)。此选项对应于Perl正则表达式中的/s修饰符。

确保</ca>仅在输入中出现一次。

如果不是这样,请稍微修改一下表达式:

"<ca>(.*?)</ca>"

这会使量词变得懒惰(而不是默认的贪婪),并使其与最接近的结束标记</ca>匹配。