Russian Qt Forum
Сентябрь 23, 2024, 01:33 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: помогите составить правильное регулярное выражение  (Прочитано 4881 раз)
neosapient
Гость
« : Май 15, 2009, 14:44 »

Помогите составить регулярное выражение, чтобы получать числа командой QRegExp::cap
1) Есть строка, начинающаяся со слова find и содержащая много слов через пробел, вида
find #123456 argfaegf
Надо найти число, которое идет сразу после знака решетки, где то внутри строки

2) Есть строка, начинающаяся со слова find и содержащая много слов через пробел, вида
find '123456' argfaegf
Надо найти число, которое внутри одинарных кавычек, где то внутри строки
« Последнее редактирование: Май 15, 2009, 14:47 от neosapient » Записан
_OLEGator_
Гость
« Ответ #1 : Май 15, 2009, 20:37 »

По необходимости сначала проверить, есть ли слово find вначале, а получить число можно регулярным выражением:
(#\d+ |'\d+' )

1) Вернет строку "#123456 ", для которой надо обрезать 2 крайних символа;
2) Вернет строку "'123456' ", для которой надо обрезать 1 левый и 2 правых крайних символа;
Записан
Tonal
Гость
« Ответ #2 : Май 18, 2009, 07:45 »

http://txt2re.com/
Записан
neosapient
Гость
« Ответ #3 : Май 22, 2009, 14:27 »

Не понимаю, как это прикрутить. Метод indexIn() всё время возвращает -1
Код:
void QxPushButton::mousePressEvent(QMouseEvent * e){
int res;
if (e->buttons() & Qt::RightButton) {
QRegExp rxlen("#\d+ |'\d+'");
QString t = text();
int pos = rxlen.indexIn(t);   // <--  тут возвращается -1
if (pos > -1) {
QString value = rxlen.cap(0);
QApplication::clipboard()->setText(value);
}
    }
}

Как правильно написать ?
Записан
_OLEGator_
Гость
« Ответ #4 : Июнь 02, 2009, 22:12 »

Регулярное выражение - это (#\d+ |'\d+' ), включает в себя еще скобки!

А лучше почитай материал по регулярным выражениям...

И вообще в коде правильно писать так:
Код
C++ (Qt)
QRegExp rxlen("(#\\d+ |'\\d+')");
« Последнее редактирование: Июнь 02, 2009, 22:17 от _OLEGator_ » Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #5 : Июнь 02, 2009, 22:17 »

и экранировать его не забываем. Всё-таки на С++ пишем.
Записан

Юра.
_OLEGator_
Гость
« Ответ #6 : Июнь 02, 2009, 22:19 »

Ага, уже Улыбающийся
Записан
neosapient
Гость
« Ответ #7 : Июнь 11, 2009, 13:07 »

Спасибо, начал понемногу разбираться.  Подмигивающий
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.077 секунд. Запросов: 23.