我与标签的文字是这样的:删除标签[托架]上的QString
This is [tag=\"value\"]my text[/tag].
我想改变这样的:
This is my text.
我看到我必须使用QString.remove (QRegExp(myRegexExpression)),但我没有成功。 我曾尝试:
删除(QRegExp( “\ [[^>] * \]”)
结果:This is .
我与标签的文字是这样的:删除标签[托架]上的QString
This is [tag=\"value\"]my text[/tag].
我想改变这样的:
This is my text.
我看到我必须使用QString.remove (QRegExp(myRegexExpression)),但我没有成功。 我曾尝试:
删除(QRegExp( “\ [[^>] * \]”)
结果:This is .
您可以使用一个否定的字符类[^\\]]
任何字符相匹配,但一个]
:
str.remove(QRegExp("\\[[^\\]]*\\]"));
你的问题是原因由[^>]*
结构的任何字符,但一个>
零个或更多倍得到匹配经过BB标签边界并且上升到最后的]
,因为*
是一个贪婪的量词(即它匹配尽可能多的字符)。见your regex in action。
我正则表达式(demo)brekadown:
\[
- 字面[
[^\\]]*
- 零或超过]
\]
其他字符(贪婪,多达它可以匹配) - 一个字面意思]
。您应该?
经营者添加到您的*
量词使其懒惰是这样的:
\[[^>]*?\]
这会使您的表达式匹配开头[
后的字符数最少,并且会匹配它后面的第一个]
,而不是最后一个。
QRegExp没有懒惰的量词 –
@WiktorStribiżew对不起,我不知道,在那种情况下,它可以被替换'\ [[^> \]] * \]'? – slugo
尝试'str.remove(QRegExp(“\\ [[^ \\]] *]”));' –
就是这样。它与wieks:str.remove(QRegExp(“\\\ [[^ \\\]] * \\\]”) – helene