SQLinfo.ru - Все о MySQL Webew.ru: теория и практика веб-технологий

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 22.09.2013 15:33:24

paa
Участник
Зарегистрирован: 22.09.2013
Сообщений: 5

Регулярное выражение с учетом количества вхождений символов

Задача следующая.
Есть база слов русского языка и есть набор букв, например "ОПРСТ", из которых нужно составить слова.
Т.е. из базы должны быть выбраны слова СПОРТ, СОР, ПОРТ и т.д.

Запрос
SELECT * FROM `table` WHERE `word` regexp '^[ОПРСТ]+$'
выбирает слова по заданным буквам.
Но как сделать, чтобы каждая буква использовалась только один раз?
Т.е. чтобы не выдавало, например, слово ТОРТ?

Неактивен

 

#2 08.10.2013 07:01:11

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Регулярное выражение с учетом количества вхождений символов

SELECT * FROM `table` WHERE `word` regexp '^[ОПРСТ]+$' AND `word` not regexp 'Т.*Т' AND ..

Неактивен

 

#3 07.01.2014 22:58:36

paa
Участник
Зарегистрирован: 22.09.2013
Сообщений: 5

Re: Регулярное выражение с учетом количества вхождений символов

Не совсем верно.
Из букв "ОРТТ" должно составиться слово "ТОРТ", но запрос этого не делает.

Неактивен

 

#4 08.01.2014 01:20:47

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Регулярное выражение с учетом количества вхождений символов

paa написал:

Но как сделать, чтобы каждая буква использовалась только один раз?
Т.е. чтобы не выдавало, например, слово ТОРТ?

paa написал:

Не совсем верно.
Из букв "ОРТТ" должно составиться слово "ТОРТ", но запрос этого не делает.

Вам не кажется, что это взаимоисключающие требования?

Неактивен

 

#5 08.01.2014 13:28:47

paa
Участник
Зарегистрирован: 22.09.2013
Сообщений: 5

Re: Регулярное выражение с учетом количества вхождений символов

Нет, не взаимоисключающие.
Нужно составить слова из заданных символов.
Сколько раз символ встречается в заданном множестве, столько раз его и можно использовать
В первом наборе "ОПРСТ" - одна буква "Т", торт не подходит.
Во втором наборе "ОРТТ" - две буквы "Т", торт должен быть.

Неактивен

 

#6 08.01.2014 13:57:36

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Регулярное выражение с учетом количества вхождений символов

.. and `word` regexp 'Т{0,2}' ..

Неактивен

 

#7 08.01.2014 15:34:58

paa
Участник
Зарегистрирован: 22.09.2013
Сообщений: 5

Re: Регулярное выражение с учетом количества вхождений символов

Таким запросом можно обработать только две идущих подряд буквы, как например в слове "ОТТОК". А в слове "ТОРТ" он не считает "Т" за два вхождения.

Неактивен

 

#8 08.01.2014 16:01:13

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Регулярное выражение с учетом количества вхождений символов

Ну тогда кроме как считать количество вхождений подстроки в строку в голову не приходит, т.е. изврат вида

MariaDB [test]> select * from test where char_length(name)-char_length(replace(name,'t',''))=2;
+------+------+
| id   | name |
+------+------+
|    6 | tort |
|    6 | ortt |
+------+------+
2 rows in set (0.00 sec)

Неактивен

 

#9 08.01.2014 16:03:44

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Регулярное выражение с учетом количества вхождений символов

в вашем случае будет <=2 and ...

Неактивен

 

#10 08.01.2014 18:49:47

paa
Участник
Зарегистрирован: 22.09.2013
Сообщений: 5

Re: Регулярное выражение с учетом количества вхождений символов

Вот и мне в голову только извратные решения приходят. А думал, вдруг есть что-то красивое.
В любом случае, спасибо за помощь!

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson