【发布时间】:2017-12-08 00:53:12
【问题描述】:
我想QRegularExpressionMatch在以下情况下返回true:
- 字符串 以 开头 FO 。 "FO 后面有一个空格"
- 字符串开始以@FOOB。
- 字符串包含 FOOBAR。
所以,我做到了:
QRegularExpression rx("(^(\\bFO\\s\\b|\\@\\bFOOB\\b)) | (\\bFOOBAR\\b)");
QString string0 = "Anywhere FOOBAR in the string";
QString string1 = "FO in the beginning";
QString string2 = "@FOOB in the beginning";
QRegularExpressionMatch match = rx.match(string1);
if (match.hasMatch())
QTextStream(stdout) << match.captured(0) << endl;
在上面的代码中,有三种模式。第一个和第二个匹配 FO 和 @FOOB 的字符串开头,第三个模式匹配字符串中的任何位置。
如果没有第三种模式,代码对于 string1 和 string2 工作正常。对于第三种模式,它仅适用于 string0 和 string2 而不适用于 string1。我猜 FO 后的空格与第三个模式不匹配,那么所有匹配都失败了?有| [first, second] 和第三个模式之间的运算符!
或者我错过了什么,有人可以帮忙吗?
谢谢!
编辑: 在我发帖 30 秒后找到解决方案:这些额外的空间是问题
QRegularExpression rx("(^(\\bFO\\s\\b|\\@\\bFOOB\\b)) | (\\bFOOBAR\\b)");
^ ^
但我不相信!那我们为什么要用括号呢?
【问题讨论】: