QRegExp在调试结果中获取重复

时间:2016-10-12 04:24:52

标签: qt qregexp qregularexpression

我的代码是:

QString strExp="Sum(2+3)-Sum(5+3)";

QRegExp regexp("(Sum\\([^)]*\\))");
regexp.indexIn(strExp);

QStringList lst=regexp.capturedTexts();
qDebug()<<"CapturedCounts:"<<regexp.captureCount();

qDebug()<<lst;

我被捕获的计数是1和qstring  列出调试输出,如下所示

("Sum(2+3)", "Sum(2+3)").

为什么?

1 个答案:

答案 0 :(得分:2)

QRegExp::capturedTexts()列表的第一个元素是整个匹配的字符串。

The doc说:

  

QStringList QRegExp::capturedTexts() const

     

返回捕获的文本字符串列表。

     

列表中的第一个字符串是整个匹配的字符串。每   后续列表元素包含与(捕获)匹配的字符串   正则表达式的子表达式。

另一个例子:

QString s = "abcd123";
QRegExp re("(ab).*(12)");

qDebug() << "indexIn:" << re.indexIn(s);
qDebug() << "captureCount:" << re.captureCount();
qDebug() << "capturedTexts:" << re.capturedTexts();

输出将是:

indexIn: 0 
captureCount: 2 
capturedTexts: ("abcd12", "ab", "12") 

如果您想获得所有比赛,可以使用:

QString strExp="Sum(2+3)-Sum(5+3)";

QRegExp regexp("(Sum\\([^)]*\\))");
regexp.indexIn(strExp);

QStringList list;
int pos = 0;

while ((pos = regexp.indexIn(strExp, pos)) != -1) {
    list << regexp.cap(1);
    pos += regexp.matchedLength();
}

qDebug() << "all matches:" << list;

输出:

all matches: ("Sum(2+3)", "Sum(5+3)")