Russian Qt Forum

Qt => Общие вопросы => Тема начата: OS2 от Май 06, 2009, 10:46



Название: Вопрос по регулярным выражениям (QRegExp)
Отправлено: OS2 от Май 06, 2009, 10:46
Всем доброго времени суток!
Знатоки, помогите написать регулярное выражение, для заполнения QLineEdit'а RGB значениями вида: 255,255,255
тоесть, чтобы была возможность ввода значений от 0, до 255 и разделенных между собой запятыми.
Всем заранее спасибо!


Название: Re: Вопрос по регулярным выражениям (QRegExp)
Отправлено: spirit от Май 06, 2009, 10:58
по идее так [0-9]{1,3},[0-9]{1,3},[0-9]{1,3}.
правда тут маленькая лажа: если вводить нули в одну из секций, то их можно ввести 3 штуки. :)


Название: Re: Вопрос по регулярным выражениям (QRegExp)
Отправлено: OS2 от Май 06, 2009, 11:04
Нет, такое не подходит, потому что позволяет вводить значения > 255.
Сейчас я использую такое: \\b(([012]?\\d?\\d|2[0-4]\\d|25[0-5])\\,){2}([012]?\\d?\\d|2[0-4]\\d|25[0-5])\\b
но оно тоже разрешает ввод > 255, хотя и ограничено 299.  >:(


Название: Re: Вопрос по регулярным выражениям (QRegExp)
Отправлено: spirit от Май 06, 2009, 11:06
да, точно, я протупил.  :)


Название: Re: Вопрос по регулярным выражениям (QRegExp)
Отправлено: Rcus от Май 06, 2009, 11:23
Цитата: xkcd
Всем стоять! Я знаю регулярные выражения!

^([0-9]|[1-9][0-9]|1(?:[0-9]){2}|2[0-4][0-9]|25[0-5]),([0-9]|[1-9][0-9]|1(?:[0-9]){2}|2[0-4][0-9]|25[0-5]),([0-9]|[1-9][0-9]|1(?:[0-9]){2}|2[0-4][0-9]|25[0-5])$

Если это выражение для QRegExpValidator, то не проще ли нормальный валидатор написать?


Название: Re: Вопрос по регулярным выражениям (QRegExp)
Отправлено: Admin от Май 06, 2009, 11:39
эээ
а у меня кажись попроще получилось  ;D

Цитировать
(\d+),(\d+),(\d+)

аа не то, вот то:

Цитировать
(\d{1,3}),(\d{1,3}),(\d{1,3})


Название: Re: Вопрос по регулярным выражениям (QRegExp)
Отправлено: spirit от Май 06, 2009, 11:41
эээ
а у меня кажись попроще получилось  ;D

Цитировать
(\d+),(\d+),(\d+)
не, значения > 255 будут допускаться, да и к тому же в любую из триад можно ввести любое количество символов, а вот regexp Rcus'a работает как надо.


Название: Re: Вопрос по регулярным выражениям (QRegExp)
Отправлено: OS2 от Май 06, 2009, 11:41
Спасибо Rcus такое выражение очень даже подходит.  :D
Вот только возник вопрос, если в QLineEdit, к которому применино это регулярное выражение, введено например: 0,0,0
то, невозможно стереть 0, чтобы заменить его на любую другую цифру, приходится либо выделять этот 0 и вводить другое значение, либо писать рядом с 0 цифру и после этого удалять сам 0. Можно это как нибудь побороть?

ЗЫ:
Цитировать
Если это выражение для QRegExpValidator, то не проще ли нормальный валидатор написать?
именно для него, но с валидаторами я не знаком, а написать надо всего одну строку....  :(


Название: Re: Вопрос по регулярным выражениям (QRegExp)
Отправлено: Admin от Май 06, 2009, 11:45
аа не то, вот то:

Цитировать
(\d{1,3}),(\d{1,3}),(\d{1,3})



Название: Re: Вопрос по регулярным выражениям (QRegExp)
Отправлено: OS2 от Май 06, 2009, 11:50
Цитировать
аа не то, вот то:
Позволяет вводить значения > 255


Название: Re: Вопрос по регулярным выражениям (QRegExp)
Отправлено: spirit от Май 06, 2009, 11:52
аа не то, вот то:

Цитировать
(\d{1,3}),(\d{1,3}),(\d{1,3})


тоже самое что и я написал :) кроче, не катит  ;D


Название: Re: Вопрос по регулярным выражениям (QRegExp)
Отправлено: Admin от Май 06, 2009, 11:58
да не катит
нету в регекспах <> для int


Название: Re: Вопрос по регулярным выражениям (QRegExp)
Отправлено: OS2 от Май 06, 2009, 20:02
А по этому поводу не у кого мыслей нету:
Цитировать
Вот только возник вопрос, если в QLineEdit, к которому применино это регулярное выражение, введено например: 0,0,0
то, невозможно стереть 0, чтобы заменить его на любую другую цифру, приходится либо выделять этот 0 и вводить другое значение, либо писать рядом с 0 цифру и после этого удалять сам 0. Можно это как нибудь побороть?


Название: Re: Вопрос по регулярным выражениям (QRegExp)
Отправлено: Rcus от Май 06, 2009, 20:11
Валидатор написать.


Название: Re: Вопрос по регулярным выражениям (QRegExp)
Отправлено: OS2 от Май 06, 2009, 20:24
Валидатор написать.
А по подробней....  ::)  ::)  ::)


Название: Re: Вопрос по регулярным выражениям (QRegExp)
Отправлено: Rcus от Май 06, 2009, 20:33
А нет поподробней, валидатор просто надо написать. Для начала нужно переопределить один метод, возвращающий одно из трех состояний... Собственно это уже в доках написано


Название: Re: Вопрос по регулярным выражениям (QRegExp)
Отправлено: mugabe от Май 07, 2009, 09:04
^([0-9]?|[1-9][0-9]|1(?:[0-9]){2}|2[0-4][0-9]|25[0-5]),([0-9]?|[1-9][0-9]|1(?:[0-9]){2}|2[0-4][0-9]|25[0-5]),([0-9]?|[1-9][0-9]|1(?:[0-9]){2}|2[0-4][0-9]|25[0-5])$

так не прокатит?


Название: Re: Вопрос по регулярным выражениям (QRegExp)
Отправлено: spirit от Май 07, 2009, 09:05
чем это выражение отличается, то того, который Rcus написал?


Название: Re: Вопрос по регулярным выражениям (QRegExp)
Отправлено: OS2 от Май 07, 2009, 10:54
чем это выражение отличается, то того, который Rcus написал?
Да нет, отличается.
2 mugabe
Большое спасибо!


Название: Re: Вопрос по регулярным выражениям (QRegExp)
Отправлено: mugabe от Май 08, 2009, 17:56
чем это выражение отличается, то того, который Rcus написал?
я там специально жирным выделил, хотя с первого взгляда не заметно :)
вопросики добавил, для необязательности цифры


Название: Re: Вопрос по регулярным выражениям (QRegExp)
Отправлено: spirit от Май 08, 2009, 17:58
ага, я уже врубился  :)