Russian Qt Forum

Qt => Общие вопросы => Тема начата: 0xFF от Март 29, 2010, 17:45



Название: QRegExp, текст между тегами
Отправлено: 0xFF от Март 29, 2010, 17:45
Немогу понять в чем проблема:

Переменная text типа QString содержит html-страничку, нужно вывести в QTextEdit текст между тегами <b> и </b>, по идее код должен быть таким:
Код
C++ (Qt)
QRegExp rx("<b>(.*?)</b>");
int pos(0);
 
while ((pos = rx.indexIn(text, pos)) != -1) {
textEdit->append( rx.cap(1) );
pos += rx.matchedLength();
}
Но ничего не выводится, хотя такая-же регулярка в программе RegexBuddy выдает правильный результат.
Попробывал заменить QRegExp rx("<b>(.*?)</b>") на QRegExp rx("<b>(.*)</b>"), в итоге выводится текст между первым и последним тегами(<b>,</b>) на странице.
Что не так?


Название: Re: QRegExp, текст между тегами
Отправлено: alexman от Март 29, 2010, 18:06
А простой парсинг с помощью QDomDocument не подойдет?


Название: Re: QRegExp, текст между тегами
Отправлено: SimpleSunny от Март 29, 2010, 19:01
По умолчанию идет поиск максимальной подстроки.
К тому же что это за конструкция ".*?", может имелось в виду ".+".

Код
C++ (Qt)
QRegExp rx("<b>(.+)</b>");
rx.setMinimal(true);
int pos(0);
 
while ((pos = rx.indexIn(text, pos)) != -1) {
textEdit->append( rx.cap(1) );
pos += rx.matchedLength();
}


Название: Re: QRegExp, текст между тегами
Отправлено: 0xFF от Март 29, 2010, 19:17
QDomDocument, что-то многие пишут что он не все html принимает в силу того, что не для этого он собственно сделан. Завтра попробую с ним разобраться, но что-то он страшный изнутри)

Цитировать
rx.setMinimal(true);
Спасибо, работает)
Цитировать
К тому же что это за конструкция ".*?"
В вики это назвали ленивая квантификация) Незнаю, но в RegexBuddy только она и работала.


Название: Re: QRegExp, текст между тегами
Отправлено: alexman от Март 29, 2010, 20:54
QDomDocument, что-то многие пишут что он не все html принимает в силу того, что не для этого он собственно сделан. Завтра попробую с ним разобраться, но что-то он страшный изнутри)
QDomDocument создан для работы с xml, а html - частный случай xml. Можите привести пример, когда QDomDocument не применим для работы с html?


Название: Re: QRegExp, текст между тегами
Отправлено: SimpleSunny от Март 29, 2010, 21:20
Возможно когда на входе невалидный html? :)


Название: Re: QRegExp, текст между тегами
Отправлено: alexman от Март 29, 2010, 21:21
Возможно когда на входе невалидный html? :)
Невалидный html - это не html ;)