如何使用QRegularExpression忽略字符串中间部分实现首尾匹配
问题解决:QRegularExpression匹配开头为settings、结尾为save的命令
你的正则表达式有两个关键错误,导致无法匹配目标字符串:
- 使用了
\.匹配点号,但你的命令中分隔符是冒号:,且实际需要匹配任意中间内容而非特定分隔符 - 结尾写了
_save$,多了下划线,与目标结尾save不匹配
修正后的正则与代码
如果只需满足以settings开头、以save结尾,中间任意内容(包括无中间内容的情况,比如settingssave),使用以下代码:
QString command = "settings:volume:save"; QRegularExpression regex("^settings.*save$"); if (regex.match(command).hasMatch()) { // 匹配成功执行的代码 }
如果需要严格匹配中间至少有一个冒号分隔(比如必须是settings:xxx:save格式,排除settingssave这类情况),可以用更精准的正则:
QRegularExpression regex("^settings:.*:save$");
正则说明
^:锚定字符串开头,确保settings出现在最前面.*:匹配任意数量(0个或多个)的任意字符(默认不匹配换行符)$:锚定字符串结尾,确保save出现在最后面- 若需要匹配包含换行的命令字符串,可添加
DotAllOption选项,让.匹配换行符:QRegularExpression regex("^settings.*save$", QRegularExpression::DotAllOption);
内容的提问来源于stack exchange,提问作者user2377283
相关产品推荐
相关产品推荐

