REGEXP

Когда использовать REGEXP вместо LIKE?

Оператор LIKE удобен для простых шаблонов поиска, таких как поиск строк, начинающихся или заканчивающихся на определённый набор символов, или содержащих определённые подстроки. Однако, если требуется более сложный и гибкий поиск, например, поиск по нескольким условиям или использование специальных символов и диапазонов, оператор REGEXP станет незаменимым инструментом.

... WHERE table_field REGEXP 'pattern';

Важные нюансы

  1. РегистронезависимостьПо умолчанию регулярные выражения в MySQL не чувствительны к регистру. Например, выражение REGEXP ‘abc’ найдёт строку и abc, и Abc, и ABC.
  2. Специальные символыНекоторые символы имеют особое значение в регулярных выражениях и требуют экранирования (например, ., *, +, ?, [, ], (, ), {, }, |, \). Для экранирования используется обратная косая черта \.

Специальные символы и структуры

Символы и структурыЧему соответствует
*0 или более экземпляров предшествующей строки
+1 или более экземпляров предшествующих строк
.Любой одиночный символ
?0 или 1 экземпляр предшествующей строки
^Соответствует началу строки
$Соответствует окончанию строки
[abc]Любой символ, указанный в квадратных скобках
[^abc]Любой символ, не указанный в квадратных скобках
[A-Z], [А-Я]Соответствует любой заглавной букве латинского и кириллического алфавита соответственно
[a-z], [а-я]Соответствует любой строчной букве латинского и кириллического алфавита соответственно
[0-9]Соответствует любой цифре
p1|p2|p3Соответствует любому из паттернов p1 или p2 или p3
{n}n экземпляров предыдущей строки
{m,n}от m до n экземпляров предыдущей строки

Найдём всех пользователей, чей номер телефона не содержит цифр «2» и «8»:

SELECT * FROM Users WHERE phone_number REGEXP '^[^28]*$'

Найдём всех пользователей, чей номер телефона начинается на «+7»

SELECT name, phone_number FROM Users WHERE phone_number REGEXP '^\\+7'

Найдём всех пользователей, чей адрес электронной почты заканчиваниется на «@outlook.com» или на «@icloud.com»:

SELECT * FROM Users WHERE email REGEXP '@(outlook.com|icloud.com)$'