删除QString

时间:2016-02-29 18:16:31

标签: regex qt qstring

我得到一个带有这样标签的文字:

  This is [tag=\"value\"]my text[/tag].

我希望将其转换为:

 This is my text.

我已经看到我必须使用QString.remove(QRegExp(myRegexExpression)),但我没有成功。 我试过了:

  

删除(QRegExp(" \ [[^>] * \]")

结果:This is .

2 个答案:

答案 0 :(得分:1)

您应该将?运算符添加到*量词,以使其变得懒惰。像这样:

\[[^>]*?\]

这将使您的表达式在与开头[匹配后匹配最少量的字符,并且将匹配其后面的第一个],而不是最后一个。

答案 1 :(得分:0)

您可以使用与[^\\]]之外的任何字符匹配的否定字符类]

str.remove(QRegExp("\\[[^\\]]*\\]"));

你遇到的问题是[^>]*构造与任何字符相匹配但>零次或多次超过BB标记边界并上升到最后]因为*是一个贪婪的量词(即匹配尽可能多的字符)。请参阅your regex in action

我的正则表达式(demo)brekadown:

  • \[ - 文字[
  • [^\\]]* - 零以上(贪婪,尽可能多地匹配)]
  • 以外的字符
  • \] - 文字]