2016-10-12 14 views
1

私のコードは次のとおりです。QRegExpデバッグ結果で重複を取得

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

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

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

qDebug()<<lst; 

私は

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

なぜ

以下のように1とは リストのデバッグ出力をQSTRINGされ、カウント捕獲なってきましたか?

答えて

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)") 
+0

in My excble Qtでそのタイプを抽出する方法 –

+0

*その式のタイプ –

+0

私はあなたの質問を理解していません。 – hank