Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Заменить \n и определеном блоке html
Форум на CrossPlatform.RU > Библиотеки > Qt > Qt Общие вопросы
pussbb
Необходимо заменить все \n блоке <pre class...>....</pre> на <br />.
я так понимаю что надо использовать QString::replace ( const QRegExp & rx, const QString & after ) .
Да вот только одна беда сколько не разбирался всё ровно не пойму я этот QRegExp.
подскажите как это сделать.
Заранее спасибо.
kwisp
pussbb,
а зачем тебе регулярное выражение?
\n - строка
<br> - строка
пользуй замену QString::replace(const QString& before, const QString& after);

П.С.
а с QRegExp советую разбираться полезная вещь. QRegExp
ViGOur
Получаем все блоки pre:
QRegExp rx("<pre[^>]*>(.*)</pre>");
rx.setMinimal(true);
QStringList list;
while( ( int pos = rx.indexIn( szData, pos)) != -1)
{
   list << rx.cap(1);
   pos += rx.matchedLength();
}
затем в цикле проходимся по элементам списка list и меняем \n на <br />:
for( int n = 0; n < list.size(); n++)
{
   QString szTmp = list.at( n);
   szTmp.replace( "\n", "<br />");
   szData.replace( list.at( n), szTmp);
}
Примерно так...

Код на работоспособность не проверял, написал от руки, так что не обессудь! :)
pussbb
Цитата(kwisp @ 9.3.2010, 15:56) *
а зачем тебе регулярное выражение?

а затем что он потом всю html-ку так сделает и довит ненужые отступы
например
<p>text</p>
<p>text</p>
будет так
<p>text</p><br />
<p>text</p><br />
kwisp
Цитата(pussbb @ 9.3.2010, 15:23) *
а затем что он потом всю html-ку так сделает и довит ненужые отступы

это не он а ты :)
та делай так чтоб замена происхоила только внутри тегов. У QString есть куча функций
indexOf lastIndexOf и проч.
ну или как выше посоветовали.

ViGOur,
не уверен что в регулярке "()" правильно записано.
по идее между тегами может быть всё что угодно
я бы использовал "(.+)"
еще можно не выбирать те блоки в тегах в которых, нет перевода строки, такое же возможно теоретически.
может "(.*\n.*)" ? как то так...
pussbb
Правильно QRegExp rx("<pre[^>]*>([^<]*)</pre>");

Все работает. Всем спасибо
SABROG
А вариант "\r\n" учитывается?
ViGOur
Цитата(kwisp @ 9.3.2010, 15:38) *
не уверен что в регулярке "()" правильно записано.
Ты прав, поправил. :)
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2024 IPS, Inc.