crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

> Заменить \n и определеном блоке html, QString.replace и QRegExp
pussbb
  опции профиля:
сообщение 9.3.2010, 14:06
Сообщение #1


Студент
*

Группа: Новичок
Сообщений: 10
Регистрация: 5.12.2009
Пользователь №: 1278

Спасибо сказали: 0 раз(а)




Репутация:   0  


Необходимо заменить все \n блоке <pre class...>....</pre> на <br />.
я так понимаю что надо использовать QString::replace ( const QRegExp & rx, const QString & after ) .
Да вот только одна беда сколько не разбирался всё ровно не пойму я этот QRegExp.
подскажите как это сделать.
Заранее спасибо.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
 
Начать новую тему
Ответов (1 - 7)
kwisp
  опции профиля:
сообщение 9.3.2010, 14:56
Сообщение #2


астарожна ынтжинэр
*****

Группа: Участник
Сообщений: 1404
Регистрация: 26.11.2008
Из: ТаганрогРодинаЧехова
Пользователь №: 435

Спасибо сказали: 113 раз(а)




Репутация:   23  


pussbb,
а зачем тебе регулярное выражение?
\n - строка
<br> - строка
пользуй замену QString::replace(const QString& before, const QString& after);

П.С.
а с QRegExp советую разбираться полезная вещь. QRegExp

Сообщение отредактировал kwisp - 9.3.2010, 15:01
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
ViGOur
  опции профиля:
сообщение 9.3.2010, 15:10
Сообщение #3


Мастер
******

Группа: Модератор
Сообщений: 3296
Регистрация: 9.10.2007
Из: Москва
Пользователь №: 4

Спасибо сказали: 231 раз(а)




Репутация:   40  


Получаем все блоки 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);
}
Примерно так...

Код на работоспособность не проверял, написал от руки, так что не обессудь! :)

Сообщение отредактировал ViGOur - 9.3.2010, 20:52
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
pussbb
  опции профиля:
сообщение 9.3.2010, 15:23
Сообщение #4


Студент
*

Группа: Новичок
Сообщений: 10
Регистрация: 5.12.2009
Пользователь №: 1278

Спасибо сказали: 0 раз(а)




Репутация:   0  


Цитата(kwisp @ 9.3.2010, 15:56) *
а зачем тебе регулярное выражение?

а затем что он потом всю html-ку так сделает и довит ненужые отступы
например
<p>text</p>
<p>text</p>
будет так
<p>text</p><br />
<p>text</p><br />
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kwisp
  опции профиля:
сообщение 9.3.2010, 15:38
Сообщение #5


астарожна ынтжинэр
*****

Группа: Участник
Сообщений: 1404
Регистрация: 26.11.2008
Из: ТаганрогРодинаЧехова
Пользователь №: 435

Спасибо сказали: 113 раз(а)




Репутация:   23  


Цитата(pussbb @ 9.3.2010, 15:23) *
а затем что он потом всю html-ку так сделает и довит ненужые отступы

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

ViGOur,
не уверен что в регулярке "()" правильно записано.
по идее между тегами может быть всё что угодно
я бы использовал "(.+)"
еще можно не выбирать те блоки в тегах в которых, нет перевода строки, такое же возможно теоретически.
может "(.*\n.*)" ? как то так...

Сообщение отредактировал kwisp - 9.3.2010, 15:39
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
pussbb
  опции профиля:
сообщение 9.3.2010, 16:05
Сообщение #6


Студент
*

Группа: Новичок
Сообщений: 10
Регистрация: 5.12.2009
Пользователь №: 1278

Спасибо сказали: 0 раз(а)




Репутация:   0  


Правильно QRegExp rx("<pre[^>]*>([^<]*)</pre>");

Все работает. Всем спасибо
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
SABROG
  опции профиля:
сообщение 9.3.2010, 20:41
Сообщение #7


Профессионал
*****

Группа: Участник
Сообщений: 1207
Регистрация: 8.12.2008
Из: Russia, Moscow
Пользователь №: 446

Спасибо сказали: 229 раз(а)




Репутация:   34  


А вариант "\r\n" учитывается?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
ViGOur
  опции профиля:
сообщение 9.3.2010, 20:53
Сообщение #8


Мастер
******

Группа: Модератор
Сообщений: 3296
Регистрация: 9.10.2007
Из: Москва
Пользователь №: 4

Спасибо сказали: 231 раз(а)




Репутация:   40  


Цитата(kwisp @ 9.3.2010, 15:38) *
не уверен что в регулярке "()" правильно записано.
Ты прав, поправил. :)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 30.11.2024, 1:04