格式中有一个字符串x-y
。我们需要一个正则表达式来捕获 x 和 y。我立即选择了这个选项:
QRegExp regexp("(.+)-(.+)");
但对于这种情况-100--500
,它不能正常工作,捕获-100-
和500
.
例子
第一个想法是让第一个捕获的组“偷懒”
QRegExp regexp("(.+?)-(.+)");
理论上,一切正常(example),但实际上QRegExp
它不支持惰性量化。所以你必须这样做
QRegExp regexp("(.+)-(.+)");
regexp.setMinimal(true);
但是现在我有两个组都“懒惰” (.+?)-(.+?)
。当然没有任何作用。例子。
好吧,没关系,你可以指定第二组应该继续到行尾。
QRegExp regexp("(.+)-(.+)$");
regexp.setMinimal(true);
理论上,一切正常。例子。实际上,没有。QRegExp
现在,出于某种原因,它不再“懒惰”并捕获-100-
and 500
。对于这样的正则表达式setMinimal
,它根本没有任何作用。
#include <QCoreApplication>
#include <QRegExp>
#include <iostream>
int main(int argc, char *argv[]){
QCoreApplication a(argc, argv);
QString str("-100--500");
QRegExp regexp("(.+)-(.*)$");
regexp.setMinimal(true);
regexp.indexIn(str);
std::cout << "1)" << regexp.cap(1).toStdString() << std::endl; //-100-
std::cout << "2)" << regexp.cap(2).toStdString() << std::endl; //500
regexp.setMinimal(false);
regexp.indexIn(str);
std::cout << "1)" << regexp.cap(1).toStdString() << std::endl; //-100-
std::cout << "2)" << regexp.cap(2).toStdString() << std::endl; //-500
return a.exec();
}
实际上问题是,如何x-y
使用从字符串中提取 x 和 y QRegExp
?带有 boost、C++11、Qt 4.6.3+ 和 replacement 的选项。\d 不匹配。
像这样尝试,
(-?[^-]+)-(.*)
或者更确切地说可能像这样:(-{0,1}[^-]+)-(.*)