#qt #qregexp #qregularexpression
#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:
Первый элемент QRegExp::capturedTexts()
списка — это вся согласованная строка.
В документе говорится:
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)")
Комментарии:
1. в моем примере, как можно извлечь эти типы в Qt
2. * что типы выражений
3. Я не понимаю вашего вопроса.
4. Как можно parseQString strExp=»Сумма (2 3)-Сумма (5 3)»; QRegExp регулярное выражение («(Сумма([^)]*))»)
5. Извините за неправильное понимание вопросов. Мне нужно знать о классе qt для синтаксического анализа арифметических выражений, таких как a * (b c) и sum (a b)