QT QRegularExpression不匹配

时间:2019-03-08 00:16:26

标签: regex qt

我的代码是:

QRegularExpression reg("^(.*) .*"); 
QString match = reg.match("help a").captured(1);

这应该可以工作,也可以在我在在线正则表达式测试网站中运行它时进行检查。我想念什么吗? 编辑:我尝试从模式中删除'^',并且有效。

1 个答案:

答案 0 :(得分:1)

该RE中没有捕获的组1。捕获组的索引为零,因此,如果要使用help,则应使用:

QRegularExpression reg("^(.*) .*"); 
reg.match("help a").captured(0);
//                           ^

如果要使用a,则应更改RE以捕获它:

//                            v  v
QRegularExpression reg("^(.*) (.*)");   // "^.* (.*)" if you don't want 'help'
reg.match("help a").captured(1);        // 0          if you don't want 'help'

当然,您可能应该在尝试使用任何匹配项之前检查其是否匹配。这可以通过QRegularExpressionMatch::hasMatch()函数来完成。

可能是捕获第一个单词(定义为除空格以外的任何字符集)的更好方法是显式允许这样做:

^ *([^ ]*)

如果您在第一个单词之后有多个空格,并且在该单词之前也留有空格,这样做会更好。