MySQL. REGEXP: поиск на основе регулярных выражений

Описание: в этой статье вы узнаете, как использовать оператор REGEXP в MySQL для выполнения сложного поиска на основе регулярных выражений.

 

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

Регулярное выражение — это специальная строка, которая описывает шаблон поиска. Это мощный инструмент, который дает вам краткий и гибкий способ определения строк текста, например символов и слов, на основе шаблонов.

Например, вы можете использовать регулярные выражения для поиска электронной почты, IP-адреса, номера телефона, номера социального страхования или какого-либо определенного шаблона.

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

Преимущество использования регулярного выражения заключается в том, что вы не ограничены поиском строки на основе фиксированного шаблона со знаком процента (%) и подчеркиванием (_) в операторе LIKE. Регулярные выражения имеют больше метасимволов для создания гибких шаблонов.

Недостаток использования регулярных выражений заключается в том, что довольно сложно понять и поддерживать такой сложный шаблон. Поэтому вы должны описать значение регулярного выражения в комментарии к оператору SQL. Кроме того, скорость извлечения данных в некоторых случаях уменьшается, если вы используете сложные шаблоны в регулярном выражении.

Сокращением регулярных выражений является regex или regexp

 

Оператор REGEXP в MySQL

MySQL адаптирует регулярное выражение, реализованное Генри Спенсером. MySQL позволяет сопоставить шаблон прямо в операторах SQL с помощью оператора REGEXP.

Следующее иллюстрирует синтаксис оператора REGEXP в предложении  WHERE:

SELECT

column_list

FROM

table_name

WHERE

string_column REGEXP pattern;

 

Этот оператор выполняет сопоставление string_column с шаблоном pattern.

Если значение в string_column совпадает с pattern, выражение в предложении WHERE возвращает true, в противном случае возвращает false.

Если либо string_column либо pattern равен NULL, результат NULL.

Помимо оператора REGEXP вы можете использовать оператор RLIKE, который является синонимом оператора REGEXP.

Форма отрицания оператора REGEXP есть NOT REGEXP.

 

MySQL. Примеры REGEXP

Предположим, вы хотите найти все товары, Названия которых начинаются с символов A, B или C. Вы можете использовать регулярное выражение в следующем выражении SELECT:

SELECT

productname

FROM

products

WHERE

productname REGEXP '^(A|B|C)'

ORDER BY productname;

 

 

 

MySQL. REGEXP. Поиск на основе регулярных выражений_1

 

Шаблон позволяет найти продукт, название которого начинается с A, B или C.

  • Символ ^ означает совпадение с начала строки.
  • символ | означает поиск альтернатив, если один не соответствует.

 

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














МетасимволПоведение
^соответствует позиции в начале искомой строки
$соответствует позиции в конце искомой строки
,соответствует любому отдельному символу
[…]соответствует любому символу, указанному в квадратных скобках
[^ …]соответствует любому символу, не указанному в квадратных скобках
p1 | p2соответствует любому из паттернов p1 или p2
*соответствует предыдущему символу ноль или более раз
+соответствует предыдущему символу один или несколько раз
{n}соответствует n количествам экземпляров предыдущего символа
{m,n}соответствует от m до n количеству экземпляров предыдущего символа

 

Чтобы найти продукты, названия которых начинаются с символа a, используйте метасимвол  ‘^’ для соответствия в начале имени:

SELECT

productname

FROM

products

WHERE

productname REGEXP '^a';

 

 

MySQL. REGEXP. Поиск на основе регулярных выражений_1

 

Если вы хотите, чтобы оператор REGEXP сравнивал строки с учетом регистра, вы можете использовать оператор BINARY для приведения строки в двоичную строку.

Потому что MySQL сравнивает двоичные строки побайтно, а не посимвольно. Это позволяет при сравнении строк учитывать регистр символов.

Например, следующий оператор соответствует только заглавным буквам «C» в начале названия продукта.

SELECT

productname

FROM

products

WHERE

productname REGEXP BINARY '^C';

 

 

MySQL. REGEXP. Поиск на основе регулярных выражений_1

 

Чтобы найти продукт, имя которого заканчивается на f, вы используете ‘f$’, чтобы соответствовать концу строки.

SELECT

productname

FROM

products

WHERE

productname REGEXP 'f$'

 

MySQL. REGEXP. Поиск на основе регулярных выражений_1

 

Чтобы найти продукт, название которого содержит слово «ford», вы используете следующий запрос:

SELECT

productname

FROM

products

WHERE

productname REGEXP 'ford';

 

 

 

MySQL. REGEXP. Поиск на основе регулярных выражений_1

 

Чтобы найти продукт, имя которого содержит ровно 10 символов, вы используете « ^’и», $ чтобы соответствовать началу и концу названия продукта, а также повторять {10} любой символ » .’ » между ними, как показано в следующем запросе:

SELECT

productname

FROM

products

WHERE

productname REGEXP '^.{10}$';

 

 

 

MySQL. REGEXP. Поиск на основе регулярных выражений_1

Из этой статьи вы узнали, как запрашивать данные с помощью оператора REGEXP в MySQL с регулярными выражениями.



2020-01-11T21:54:29
База данных MySQL