2016-02-29 16 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