我與標籤的文字是這樣的:刪除標籤[托架]上的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