Russian Qt Forum

Программирование => Общий => Тема начата: skydion от Март 09, 2010, 13:38



Название: Помогите написать regexp
Отправлено: skydion от Март 09, 2010, 13:38
Ребята нужно написать поиск слова в MySQL по определенной маске и заданой длины...

Думаю юзать regexp но нужных знаний не имею, читал немного по теме, но пока что тяжело самому сделать ??? методом тыка не прошло...

пс. Кодировка UTF8, думаю с этим проблем не должно быть?


Название: Re: Помогите написать regexp
Отправлено: voronElf от Март 09, 2010, 14:17
Поиск нужен в sql запросе или в модели ?

Цитировать
по определенной маске
так можт масками и пользоваться , они побыстрее регулярок ?


Название: Re: Помогите написать regexp
Отправлено: skydion от Март 09, 2010, 14:23
А как? Можно пример? А то я только начал с этим разбираться...


Название: Re: Помогите написать regexp
Отправлено: alexman от Март 09, 2010, 15:44
Поиск 'SQL LIKE' в инете!


Название: Re: Помогите написать regexp
Отправлено: skydion от Март 09, 2010, 16:08
Ну я пробовал, но там почему-то чтобы найти 6-ти символьное слово нужно задать 7 раз "_".

QString tmp = createTemplate(curWord);
query.prepare("SELECT _id, _word FROM words WHERE lower(_word) LIKE \"?\";");
query.addBindValue(QVariant(tmp));

почему значение не биндится?
На выполнение идет запрос без подставки шаблона/маски?


Название: Re: Помогите написать regexp
Отправлено: voronElf от Март 10, 2010, 06:57
1. Т.е. все-таки sql
2. Значение не биндится или запрос не выполняется ?
3. я бы пробовал так:
Код:
QString tmp = createTemplate(curWord);
query.prepare("SELECT _id, _word FROM words WHERE lower(_word) LIKE ?");
query.addBindValue(tmp);

никогда не писал точку с запятой в конце запроса, при забиндивании кавычки сами проставляются насколько знаю


Название: Re: Помогите написать regexp
Отправлено: skydion от Март 10, 2010, 16:52
1. Т.е. все-таки sql
Ну да я же писал что MySQL  :)

2. Значение не биндится или запрос не выполняется ?

Код:
QString tmp = createTemplate(curWord);
query.prepare("SELECT _id, _word FROM words WHERE lower(_word) LIKE ?");
query.addBindValue(tmp);

никогда не писал точку с запятой в конце запроса, при забиндивании кавычки сами проставляются насколько знаю
Да спасибо так заработало, без кавычек... хотя я и одинарные пробовла тоже не шло...
Ну незнаю я всюду пишу точку с запятой ) привычка, вроде нигде не материлось ;)

Ну, пока что для тестирования и LIKE подойдет... глюки уже словил  :)
Но всетаки на будущее нужно регексп, так как возможны условия для подбора слова...

Так что помогайте ) как задать длину слова для поиска средствами regexp встроеного в MySQL... ?

ps. кто в курсе какая версия sql реализована в драйвере БД Qt 4.6.2? вопрос почему задаю, я вот пользую БД 5.1.44,
все ли возможности даной версии я смогу использовать?


Название: Re: Помогите написать regexp
Отправлено: voronElf от Март 11, 2010, 07:12
чтото в стиле "^.{6}$"

в общем документация MySql, про фигурные скобки смотри


Название: Re: Помогите написать regexp
Отправлено: skydion от Март 11, 2010, 09:16
Да нет, я такое сам пробовал ::) не работает.... возвращает почему-то трехсимвольные слова...

^.{6, 6}$ так тоже пробовал... выдает Error code 1139, SQL state 42000: Got error 'invalid repetition count(s)' from regexp


Название: Re: Помогите написать regexp
Отправлено: voronElf от Март 11, 2010, 09:58
на первой попавшейся под руку таблице:
Код:
SELECT * FROM `jos_vm_2t_brand` where bname regexp '^.{6}$'
все отлично работает (не из qt запрос делал)

Со стороны MySql все норм, проверяй чтобы в mysq запрос приходил именно в таком виде. Мож как то в коде косячится ? Попробуй без забиндивания значений ручками запрос в строке сформировать, должен пройти