正则表达式在[]之间提取内容

时间:2016-04-05 14:26:00

标签: c++ regex qt

我有一个表达式:

[training_width]:lofmimics

我想提取[]之间的内容,在上面我想要的例子中

training_width

我尝试过以下方法:

QRegularExpression regex("\[(.*?)\]");
QRegularExpressionMatch match = regex.match(strProcessed);
QString textYouWant = match.captured(1);

strProcessed包含原始文字的位置,但到目前为止它还没有效果。

2 个答案:

答案 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)

只需尝试这种模式:

\\[([^\\]]*)

所以$1包含预期结果。

Online Demo