crossplatform.ru

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

> Регулярные выражения, замена текущего патерна, не могу понять как это сделать
ViGOur
  опции профиля:
сообщение 18.4.2008, 11:02
Сообщение #1


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

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

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




Репутация:   40  


Есть код:
// szExp = "<a href=([^>]+)>([^<]+)</a>";
// rszData = "<li><a href="how-to-learn-qt.html">Как изучать Qt</a></li><li><a href="installation.html">Установка</a></li>";
void ReplaceRegText( const QString szExp, QString &rszData)
{
    QString sz1, sz2;
    QRegExp rx( szExp, Qt::CaseInsensitive);
    int pos = rx.indexIn( rszData);
    while( ( pos = rx.indexIn( rszData, pos)) != -1)
    {
        QString szUrl = rx.cap( 1);
        QString szText = rx.cap( 2);

        QString szTmp = "[[" + szUrl + " | " + szText + "]]";
        rszData.replace( rszData, szTmp); // проблемная строка
        
        pos += rx.matchedLength();
    }
}
Если сделать rszData.replace( rszData, szTmp), то заменится вся строка и получится:
Цитата
"<li>[[how-to-learn-qt | Как изучать Qt]]</li><li>[[how-to-learn-qt | Как изучать Qt]]</li>"
Разумеется это не правильно.
Как правильно нужно менять в данном случае?

Хехе, проблемы снята, все оказалось проще просто, в прочем как обычно.

Нужно было просто получить анализируемый по данному паттерну текст:
QString szPattern = rszData.mid( pos, rx.matchedLength());
ну и заменить его:
rszData.replace( rszData, szTmp); // больше не проблемная строка


p.s. это я делаю пробы преобразования qt документации в формат вики. :)

Сообщение отредактировал Admin - 21.4.2008, 10:24
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме


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


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




RSS Текстовая версия Сейчас: 29.11.2024, 7:34