crossplatform.ru

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


  Ответ в QRegExp
Введите ваше имя
Подтвердите код

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
 

Опции сообщения
 Включить смайлы?
Иконки сообщения
(Опционально)
                                
                                
  [ Без иконки ]
 


Последние 10 сообщений [ в обратном порядке ]
eldar85 Дата 2.5.2010, 13:32
  все, разобрался. это косяк в коде был))) я в rx помещал предыдущую фразу которая дублировалась в тексте, поэтому два раза выводил одно и тоже число))
eldar85 Дата 2.5.2010, 9:07
  да вот такой вариант работает как нужно
QRegExp rx("(\\d+)");
QString str = "Offsets: 12 14 99 231 7";
QStringList list;
int pos = 0;

while ((pos = rx.indexIn(str, pos)) != -1) {
     list << rx.cap(1);
     pos += rx.matchedLength();
}
qDebug << list;

но есть одно но, почему то он все выпарсивает в двух экзэмплярах, тоесть я делаю qDebug << list; и он выврдит так
"10","10", "11","11", "12","12", "13","13", "14","14" не подскажете из за чего??

даже не два а три экзэмпляра выдает))
"10","10", "10" ..............................

даже так - то два то три экзэмпляра выдает... капец, так вообще не катит... не въеду как убрать то это все...
eldar85 Дата 1.5.2010, 22:23
  я тоже так думаю, так будет проще и думаю более правильно... блин еще не успел попробывать код этот, работы много)) ща буду пробывать, спасибо вам за советы)))
Litkevich Yuriy Дата 1.5.2010, 12:02
 
Цитата(eldar85 @ 1.5.2010, 3:20) *
а мне нужно выпарсить их в разные переменные и уже потом с ними дальше работать...
может тогда тебе будет удобнее помещать фрагменты в список строк (QStringList), потом вытащишь построчно.
eldar85 Дата 30.4.2010, 23:20
  но так он не поместит найденное в разные QString ... тут будет все помещенно в один outtext же если я правельно понял... а мне нужно выпарсить их в разные переменные и уже потом с ними дальше работать...

может что то типа этого
QRegExp rx("(\\d+)");
QString str = "Offsets: 12 14 99 231 7";
QStringList list;
int pos = 0;

while ((pos = rx.indexIn(str, pos)) != -1) {
     list << rx.cap(1);
     pos += rx.matchedLength();
}


это тоже из документации... ща попробую и отпешусь...
Litkevich Yuriy Дата 30.4.2010, 22:47
 
Цитата(BRE @ 1.5.2010, 0:45) *
переменную pos.
разве?
А по моему он сравнивает результат работы оператора присваивания с минус единицей.

вот мой код:
int pos = 0;
int mch = 0;
int capcnt = 0;
while (pos >= 0)
{
    pos = rx.indexIn(text, pos);

    mch = rx.matchedLength();
    
    if(mch > 0)
    {
        capcnt++;
        outtext->setPlainText(outtext->toPlainText()+rx.cap(0)+"\r\n");
    }

    pos += mch;
    if (!pos) break;
}
Выдрано с мясом, косточки не глотать!

Цитата(Litkevich Yuriy @ 1.5.2010, 2:43) *
А по моему он сравнивает результат работы оператора присваивания с минус единицей.
хм, хотя результат и будет равен переменной pos
eldar85 Дата 30.4.2010, 22:40
  даже я ошибся, он мне находит последний из нужного, не 10 а 14)) а нужно еще найти 13, 12, 11 и 10)))) вот так ))

как то в bost делал что то подобное, но не помню как...
eldar85 Дата 30.4.2010, 21:45
  ага, так а как тогда сделать то??? получается тут идет условие - пока pos не равно -1, но это же просто копирование строки в переменную f, по идее все правильно))
мне нужно вот так:
QString f;
QString c;
QString d;
......

    QRegExp rx(str);


             int pos = 0;

             while ((pos = rx.indexIn(xStr, pos)) != -1)
             {
                 f =rx.cap(1); // тут присваивается f 10
                                    //и я хотел остальным Qstring ам присвоить 11, 12, 13, 14 соответственно..
                 с = rx.cap(2); //может так?? но так я пробывал, ничего там не находиться, а находит тольско это f =rx.cap(1) остальное все пустое
                 pos += rx.matchedLength();
             }
    
    qDebug() << f;

пулучается он первое нашел 10 и поместил в QString f это 10. так вот мне нужно например чтобы я мог так
Qstrind f было равно 10
Qstring с было равно 11
Qstring в было рано 12 и так далее))
BRE Дата 30.4.2010, 20:45
 
Цитата(eldar85 @ 30.4.2010, 21:20) *
если честно не могу и в правду понять что я там сравниваю...

переменную pos. :)
eldar85 Дата 30.4.2010, 20:20
  блин, не знаю, я этот пример взял из документации))
если честно не могу и в правду понять что я там сравниваю...
Просмотр темы полностью (откроется в новом окне)
RSS Текстовая версия Сейчас: 29.3.2024, 1:24