2016-02-29 49 views
1

我与标签的文字是这样的:删除标签[托架]上的QString

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

我想改变这样的:

This is my text. 

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

删除(QRegExp( “\ [[^>] * \]”)

结果:This is .

+1

尝试'str.remove(QRegExp(“\\ [[^ \\]] *]”));' –

+1

就是这样。它与wieks:str.remove(QRegExp(“\\\ [[^ \\\]] * \\\]”) – helene

回答

0

您可以使用一个否定的字符类[^\\]]任何字符相匹配,但一个]

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

你的问题是原因由[^>]*结构的任何字符,但一个>零个或更多倍得到匹配经过BB标签边界并且上升到最后的],因为*是一个贪婪的量词(即它匹配尽可能多的字符)。见your regex in action

我正则表达式(demo)brekadown:

  • \[ - 字面[
  • [^\\]]* - 零或超过]
  • \]其他字符(贪婪,多达它可以匹配) - 一个字面意思]
1

您应该?经营者添加到您的*量词使其懒惰是这样的:

\[[^>]*?\]

这会使您的表达式匹配开头[后的字符数最少,并且会匹配它后面的第一个],而不是最后一个。

+0

QRegExp没有懒惰的量词 –

+0

@WiktorStribiżew对不起,我不知道,在那种情况下,它可以被替换'\ [[^> \]] * \]'? – slugo