В MySQL регулярные выражения позволяют упрощать запросы — прежде всего, запросы типа SELECT. Как и любые другие регулярные выражения в MySQL это наборы символов под которые могут подходить те или иные последовательности вводимых клиентом данных.
Цикл по принципам работы с MySQL, более ранние материалы:
- Вводная статья цикла
- Начало работы с MySQL и основные команды
- MySQL SELECT, выборка из таблиц MySQL
Ниже приведены выражения, которым могут использоваться и их характеристика
'.'
Точка означает, что вместо нее может использоваться любой одиночный символ
'[…]'
Квадратные скобки, под них подойдут любой символ в них указанный и один из них. Например, регулярное выражение '[abc]' будет означать, что a или b, или c могут встретиться и будут удовлетворять regexp.
Регистр имеет значение, A предыдущему выражению удовлетворять уже не будет, за счет тире можно указывать диапазон значений если вариантов много и перечислять их все неудобно.
Под [a-z][1-9] подойдет выражение из последовательных буквы латинского алфавита в нижнем регистре и цифры
'*'
Подходит под любое число знаков, ей предшествующих. Так [a-z]* будет означать, что под regexp подойдет слово любой длины из латинских букв в нижнем регистре.
'^'
Означает, что выражение должно начинаться с символа, который идет сразу за знаком
'$'
Означает, что выражение должно заканчиваться на символ, который идет сразу перед знаком
Все регулярные выражения выводятся с указанием ключевого слова 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 запросах