regex - 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";
}
解决方案
清理了正则表达式,它现在匹配。
QRegularExpression re;
QString test = R"(9410 ?\d{18})";
re.setPattern(test);
if(re.match("9410811298370146293071").hasMatch())
{
qWarning() << "TRUE";
}
else {
qWarning() << "FALSE";
}
推荐阅读
- web2py - 如何从从日期计算中获取的值中剥离并去除 (... days, 0:00:00)
- regex - 如何仅查找包含两个连续元音的行
- rails-api - 包含符合 JSON API 规范的非关联对象响应
- sql - 如何在 SQL Server 中使用变量删除行?
- javascript - 检查空对象文字
- asp.net - 更新 IN 列表 asp.net 的数据
- python - 在另一个目录中的 .exe 上调用 subprocess.call()
- highcharts - Highcharts 的饼图 minSize 选项不起作用
- python - CatBoost 中应用的贝叶斯优化
- java - 在发送自动 SMS 之前显示“花钱的 SMS 服务”对话框