我正在努力实现正则表达式。我在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";
}
答案 0 :(得分:0)
清理了正则表达式,现在可以匹配了。
QRegularExpression re;
QString test = R"(9410 ?\d{18})";
re.setPattern(test);
if(re.match("9410811298370146293071").hasMatch())
{
qWarning() << "TRUE";
}
else {
qWarning() << "FALSE";
}