2016-10-12 2 views
1

Мой код:QRegExp получение Дублирование в Debug Результат

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)"). 

Почему?

ответ

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 examble, Как можно извлечь эти типы в Qt –

+0

* что типы выражений –

+0

Я не понимаю ваш вопрос. – hank

Смежные вопросы