Проблема в том, что QRegExp
поддерживает только жадные квантификаторы.Точнее, поддерживает либо жадные , либо квантификаторы, но не оба .Таким образом, <span(.*?)>
недопустимо, поскольку нет оператора *?
.Вместо этого вы можете использовать
QRegExp rx("<span(.*)>");
rx.setMinimal(true);
Это даст каждые *
, +
и ?
в QRegExp
поведении *?
, +?
и ??
соответственно, а не их поведение по умолчанию.Разница, как вы можете знать или не знать, состоит в том, что минимальные версии соответствуют небольшим символам, а не многим .
В этом случае, вы также можете написать
QRegExp rx("<span([^>]*)>");
Это, вероятно, то, что я бы сделал, так как он имеет тот же эффект: сопоставляйте, пока не увидите >
.Да, у вас более общий характер (если у вас есть многосимвольный окончательный токен), но я думаю, что в простом случае это немного лучше.Разумеется, любой из них будет работать.
Кроме того, будет очень и очень осторожен при разборе HTML с регулярными выражениями .На самом деле вы не можете этого сделать, и распознать теги - хотя (я считаю) это возможно - намного сложнее, чем просто это.(Комментарии, блоки CDATA и инструкции по обработке не дают покоя.) Если вы знаете, какие данные вы просматриваете, это может быть приемлемым решением;Тем не менее, вместо этого я бы заглянул в анализатор HTML.