首页 > 解决方案 > Qt正则表达式转义序列问题

问题描述

我正在努力实现正则表达式。我在 Ubuntu 系统上使用 Qt creator。我使用第 3 方工具针对示例编号测试了我的正则表达式。所以我相信问题不在于表达。我想要的注册前:

/\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

这些尝试都没有产生有效的 reg ex。反斜线有些可疑。欣赏你的想法。我一定错过了一些简单的东西......

编辑:这是一些简化的代码。当我运行它时,它返回“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";
}

标签: regexqt

解决方案


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

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

推荐阅读