【问题标题】:Delete tag [bracket] on QString删除 QString 上的标签 [括号]
【发布时间】:2016-02-29 18:16:30
【问题描述】:

我得到一个带有这样标签的文本:

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

我想把它改成这样:

 This is my text.

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

删除(QRegExp("\[[^>]*\]")

结果:This is .

【问题讨论】:

  • 试试str.remove(QRegExp("\\[[^\\]]*]"));
  • 差不多了。它与: str.remove(QRegExp("\\[[^\\]]*\\]")

标签: regex qt qstring


【解决方案1】:

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

\[[^>]*?\]

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

【讨论】:

  • QRegExp 中没有惰性量词。
  • @WiktorStribiżew 对不起,我不知道,在那种情况下,它可以被 \[[^>\]]*\] 替换?
【解决方案2】:

您可以使用与] 以外的任何字符匹配的否定字符类[^\\]]

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

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

我的正则表达式 (demo) 故障:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-11
    • 2015-09-13
    • 1970-01-01
    相关资源
    最近更新 更多