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


В MySQL регулярные выражения позволяют упрощать запросы — прежде всего, запросы типа SELECT. Как и любые другие регулярные выражения в MySQL это наборы символов под которые могут подходить те или иные последовательности вводимых клиентом данных.



Цикл по принципам работы с MySQL, более ранние материалы:


  1. Вводная статья цикла
  2. Начало работы с MySQL и основные команды
  3. MySQL SELECT, выборка из таблиц MySQL

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



'.'

Точка означает, что вместо нее может использоваться любой одиночный символ

'[…]'

Квадратные скобки, под них подойдут любой символ в них указанный и один из них. Например, регулярное выражение '[abc]' будет означать, что a или b, или c могут встретиться и будут удовлетворять regexp.

Регистр имеет значение, A предыдущему выражению удовлетворять уже не будет, за счет тире можно указывать диапазон значений если вариантов много и перечислять их все неудобно.

Под [a-z][1-9] подойдет выражение из последовательных буквы латинского алфавита в нижнем регистре и цифры

'*'

Подходит под любое число знаков, ей предшествующих. Так  [a-z]* будет означать, что под regexp подойдет слово любой длины из латинских букв в нижнем регистре.

'^'

Означает, что выражение должно начинаться с символа, который идет сразу за знаком

'$'

Означает, что выражение должно заканчиваться на символ, который идет сразу перед знаком


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


Все регулярные выражения выводятся с указанием ключевого слова REGEXP. Изображение взято с официального сайта MySQL



MySQL регулярные выражения — примеры запросов


Для демонстрации возьмем выражение с LIKE и используем вместо него REGEXP



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

SELECT * FROM REAL_ESTATE WHERE street REGEXP '^B.l*';

+————+————-+————+————-+————+————+——-+
| type | city | floorspace | district | street | rentorsale | PRICE |
+————+————-+————+————-+————+————+——-+
| Appartment | Novosibirsk | 33 | Oktabriskiy | Belinskogo | Rent | 17000 |
| Appartment | Moscow | 42 | Himki | Bolshaya | Rent | 18000 |
+————+————-+————+————-+————+————+——-+
2 rows in set (0.00 sec)



Можно найти ту же квартиру на улице Белинского задав в качестве критерия поиска последний символ в имени

SELECT * FROM REAL_ESTATE WHERE street REGEXP 'o$';

+————+————-+————+————-+————+————+——-+
| type | city | floorspace | district | street | rentorsale | PRICE |
+————+————-+————+————-+————+————+——-+
| Appartment | Novosibirsk | 33 | Oktabriskiy | Belinskogo | Rent | 17000 |
+————+————-+————+————-+————+————+——-+
1 row in set (0.00 sec)



Далее рассмотрим простейшие конструкции с объединением в SELECT запросах

Сказать спасибо