2016-09-23 15 views
2

В проекте, над которым я работаю, мне нужно сделать QStringList из QRegExp захватывает за исключением для 2 из них: 1-й и один из других, в зависимости от некоторых других параметров.Какое использование QRegExp :: pos() без соответствующего QRegExp :: len() рода?

Простым подходом было бы использовать QRegExp::capturedTexts(), а затем удалить из возвращенного списка два ненужных элемента. Это, однако, подразумевает, что два QStrings и связанные с ними QList узлы должны быть распределены только для того, чтобы быть убраны без реального использования, что кажется расточительным.

Я тогда подумал, что просто построю QStringList сам один захваченный текст вовремя, через QRegExp::cap(). Но QRegExp::cap() - itself implemented in terms ofQRegExp::capturedTexts(), что сделало бы мой код забавным, по крайней мере.

Так что я посмотрел на API и нашел довольно удобный QRegExp::pos() метод, который, в документации говорится, «Возвращает позицию го захваченного текста в искомом строке.»

Очень аккуратно, я думал , Я мог бы использовать QString::mid() и сам построить QStringList. Это what the actual implementation из QRegExp::capturedTexts()does, в конце концов.

За исключением того, что я не знаю, как получить n-й захваченный текст длина, который мне нужно извлечь захваченный текст с помощью QString::mid(). Действительно, позиция и длина любого из захваченных текстов хранятся один рядом с другим, как can be seen в QRegExp::pos()implementation, но нет никакой информации об объекте информации, если я не ошибаюсь, случай, за который я извиняюсь авансовый. :)

Итак, вот мой вопрос: если я прав, и нет способа получить какую-либо длину захваченного текста, какой вариант использования имеет QRegExp::pos()? Я не могу представить ни одной ситуации, в которой я хотел бы знать, где начинается захваченный текст, не имея возможности получить его.

__

PS. Qt5 QRegularExpressionMatch класс предоставляет методы capturedStart() и capturedEnd(), которые заполняют эту пустоту, но я застрял с Qt4.8.6.

ответ

1

Это ошибка API. Это все. Хотелось бы, чтобы у него был какой-то волшебный трюк - по-моему, нет. Я не стал бы слишком беспокоиться о выделении возвращаемого значения capturedTexts, если это не синтаксический анализатор, который вызывается на много и много текста. Используйте то, что у вас есть - вероятно, в любое время, когда вы тратите на настройку, это время потрачено впустую на этот момент, если вы не проталкиваете миллионы строк текста через эту вещь.

+0

Это то, что я собираюсь делать, конечно, но мне было любопытно, что может использовать «QRegExp :: pos()», чего я не могу себе представить. –