Qt正则表达式转义序列问题

时间:2018-12-26 07:00:50

标签: regex qt

我正在努力实现正则表达式。我在Ubuntu系统上使用Qt Creator。我使用第3方工具针对示例编号测试了正则表达式。因此,我认为问题不在于表达。 我想要的reg ex:

  

/ \ b(9410?\ d {18})\ b / i

我将正则表达式字符串放入QString变量中。导致错误:

  

QString test =“ / \ b(9410?\ d {18})\ b / i”;未知的转义序列'\ d'

为解决此问题,我在错误的位置添加了一个额外的\:

  

QString test =“ / \ b(9410?\\ d {18})\ b / i”;   qWarning()<<测试;

调试器指示(请注意\\):

  

/ \ b(9410?\\ d {18})\ b / i

我还尝试了一个原始字符串:

  

QString测试= R“(/ \ b(9410?\ d {18})\ b / i)”;   qWarning()<<测试;

调试器显示所有单个\替换为\\。

  

/ \\ b(9410?\\ d {18})\\ b / i

这些尝试均未产生正常的正则表达式。后面的斜线有些混乱。欣赏你的想法。我一定想念一些简单的东西...

编辑:这是一些简化的代码。当我运行此命令时,它返回“ FALSE”,表示不匹配。我在regex101.com上测试了此正则表达式和编号。在那里工作。这就是为什么我认为我的实现存在缺陷。只是无法将手指放在上面。

QRegularExpression re;
QString test = R"(/\b(9410 ?\d{18})\b/i)";
re.setPattern(test);
if(re.match("9410811298370146293071").hasMatch())
{
    qWarning() << "TRUE";
}
else {
    qWarning() << "FALSE";
}

1 个答案:

答案 0 :(得分:0)

清理了正则表达式,现在可以匹配了。

QRegularExpression re;
QString test = R"(9410 ?\d{18})";
re.setPattern(test);
if(re.match("9410811298370146293071").hasMatch())
{
    qWarning() << "TRUE";
}
else {
    qWarning() << "FALSE";
}