2016-10-12 3 views
1

mein Code:QRegExp bekommen Vervielfältigung in Debug Ergebnis

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

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

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

qDebug()<<lst; 

Ich habe immer Zählung erfasst 1 und Liste Debug-Ausgabe QSTRING wie unten

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

gezeigt Warum?

Antwort

2

Das erste Element der Liste QRegExp::capturedTexts() ist die gesamte übereinstimmende Zeichenfolge.

The doc sagt:

QStringList QRegExp::capturedTexts() const

Gibt eine Liste der erfassten Textstrings.

Die erste Zeichenfolge in der Liste ist die gesamte übereinstimmende Zeichenfolge. Jedes nachfolgende Listenelement enthält eine Zeichenfolge, die einem (erfassenden) Teilausdruck des regulären Ausdrucks entsprach.

Ein weiteres Beispiel:

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

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

ausgegeben:

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; 

Ausgabe::

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

Wenn Sie alle Spiele erhalten möchten, können Sie diese verwenden

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

in meinem Beispiel, wie kann extrahiert werden diese Arten von in Qt –

+0

* diese Arten von Ausdrücken –

+0

Ich verstehe Ihre Frage nicht. – hank