删除 QString 上的标签 [bracket]

Delete tag [bracket] on QString

我收到一条带有这样标签的文本:

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

我想这样改造它:

 This is my text.

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

remove(QRegExp("\[[^>]*\]")

结果:This is .

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

\[[^>]*?\]

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

您可以使用否定字符 class [^\]] 匹配任何字符,但 ]:

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

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

我的正则表达式 (demo) 分解:

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