Russian Qt Forum

Qt => Общие вопросы => Тема начата: zodiac от Сентябрь 21, 2007, 13:13



Название: Все тотже QRegExp
Отправлено: zodiac от Сентябрь 21, 2007, 13:13
qqq ="ааа [345.56] sdads [123.45] dfsd [565.56]
Есть код:
QRegExp rx("\\[(.*)\\]");
int pos = rx.indexIn(str);
if (pos > -1) {
   return rx.cap(1);
}
Но почему-то он возвращает только так: "345.56] sdads [123.45] dfsd [565.56", а мне нужно только число в [].
т.е. например: 345,56, 123,45.....


Название: Re: Все тотже QRegExp
Отправлено: Tonal от Сентябрь 21, 2007, 16:44
QRegExp rx("\\[([^\]]*)\\]");
Или можно явно перечислить допустимые символы которые ты ожидаешь встретить.
Вот для чисел с точкой:
QRegExp rx("\\[([\d.]*)\\]");


Название: Re: Все тотже QRegExp
Отправлено: zodiac от Сентябрь 21, 2007, 17:02
Спасибо. rx.cap(1) возвращает значение из первых скобок, но rx.cap(2) не возвращает ничего. Как тогда брать значение из вторых...n-ых скобок?


Название: Re: Все тотже QRegExp
Отправлено: Tonal от Сентябрь 21, 2007, 17:15
Открой в ассистенте  QRegExp::indexIn
В примере ++count замени на rx.cap(1)


Название: Re: Все тотже QRegExp
Отправлено: zodiac от Сентябрь 21, 2007, 17:26
Что-то не понял на что заменить и что именно :/

str = "qwerty [24.453] qwer: [324.12] rewq: [212.12]";
QRegExp rx("\\[([\\d.]*)\\]");
int pos = rx.indexIn(str);
if (pos > -1) {
   return rx.cap(1);
}
как быть в данном случае?
   


Название: Re: Все тотже QRegExp
Отправлено: zodiac от Сентябрь 21, 2007, 17:27
Все, мысль понял. Реализовал почти :)