QRegExp没有按预期工作

时间:2013-11-12 16:38:17

标签: regex qt qregexp

我有一个QPlainTextEdit,想要使用QRegExp

选择其中的特定文字

这是文本块的示例:

Block1 = Foo1 {
     bla bla bla;
     bla bla bla;
}

我需要从=}选择给定子字符串Foo1

这是我的代码:

QString name = "Foo1";
QString pattern = "[\\=][\\s]" + name + "[\\s][\\{](^\\})*[\\}]";
//pattern = "[\=][\s]Foo1[\s][\{](^\})*[\}]"

以及选择这些行:

this->moveCursor(QTextCursor::Start);
this->document()->find(QRegExp(pattern));

奇怪的是,这只选择Foo1而不是

= Foo1 {
     bla bla bla;
     bla bla bla;
}

1 个答案:

答案 0 :(得分:2)

问题

以下是Foo1的最终正则表达式:

[\=][\s]Foo1[\s][\{](^\})*[\}]


以下是QRegExp理解的内容:

Regular expression visualization

解决方案

所以这是你应该告诉它的:

=\s*Foo1\s*{[^}]+}

以及它会理解的内容:

Regular expression visualization

还有更多......

  • 在解决方案中,我承认代码中不会出现}。否则,正则表达式不适合处理这种情况。如果在您的上下文中发生这种情况,则应该依赖解析器而不是正则表达式。
  • 使用Debuggex可视化您的正则表达式。