Хранение регулярных выражений в таблице базы данных MySQL и сопоставление с ними

У меня очень интересная задача, которую я не знаю как реализовать.

Мне нужно хранить много регулярных выражений в таблице базы данных и иметь возможность найти, какое из них соответствует заданной строке.

Например:

id | regexp
---|-------------
1  | ^hello world$
2  | ^I have [0-9] flowers&
3  | ^some other regexp$ 
4  | ^and another (one|regexp)$

И мне нужно найти, какое из этих выражений соответствует строке «У меня есть 5 цветов». Конечно, я могу SELECT * FROM table и перебирать выражения, соответствующие им, одно за другим в PHP, но это было бы ужасно для сервера.

Можно ли как-то проиндексировать эту таблицу или использовать специальный SQL-запрос для решения этой задачи?

Буду признателен за любой ответ. Спасибо.


person Silver Light    schedule 01.03.2010    source источник


Ответы (2)


select * from table where $your_string RLIKE regexp 

регулярные выражения mysql

person user187291    schedule 01.03.2010
comment
Спасибо, раньше использовал RLIKE, но не додумался переключить аргументы :) - person Silver Light; 01.03.2010
comment
Какой тип индекса я должен использовать, чтобы лучше всего соответствовать этой ситуации? Просто проиндексировать столбец регулярного выражения? - person Silver Light; 01.03.2010

SELECT * FROM table WHERE 'some stuff' REGEXP `regexp`;

К сожалению, нет возможности использовать индексы с запросами, использующими регулярные выражения.

person Romuald Brunet    schedule 04.03.2010