我有一个表达式:
[training_width]:lofmimics
我想提取[]之间的内容,在上面我想要的例子中
training_width
我尝试过以下方法:
QRegularExpression regex("\[(.*?)\]");
QRegularExpressionMatch match = regex.match(strProcessed);
QString textYouWant = match.captured(1);
strProcessed
包含原始文字的位置,但到目前为止它还没有效果。
答案 0 :(得分:2)
正则表达式的主要问题是反斜杠必须加倍。
所以,有两个解决方案:
.*?
模式加倍反斜杠("\\[(.*?)\\]"
)样品:
QRegularExpression regex("\\[(.*?)\\]");
QRegularExpressionMatch match = regex.match(strProcessed);
QString textYouWant = match.captured(1);
[^\\]\\[]*
和[
以外的0 +个字符匹配的否定字符类]
:样品:
QRegularExpression regex("\\[([^\\]\\[]*)\\]");
QRegularExpressionMatch match = regex.match(strProcessed);
QString textYouWant = match.captured(1);
它们之间的区别在于,第一个 - 因为QRegularExpression
实现类似Perl的regexp - 不匹配换行符(因为类似Perl的regexp中的.
默认情况下与换行符不匹配,您需要指定QRegularExpression::DotMatchesEverythingOption
标志。第二个,因为它使用了否定的字符类,将匹配[
和下一个最接近的]
之间的任何内容,甚至换行符。
答案 1 :(得分:1)