Он проглотил много мудрости, но все это словно попало ему не в то горло (Г. Лихтенберг).

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

3 мин для чтения
FavoriteLoadingДобавить в избранное
1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (1 оценок, среднее: 5,00 из 5)
Загрузка...
11 января 2020
Как скопировать базу данных MySQL
Описание: в этой статье вы узнаете, как использовать оператор 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;

 

Читать  ROW_NUMBER, вот как вы его эмулируете в MySQL

 

 

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 с регулярными выражениями.

Читать  Как изменить механизм хранения таблицы в MySQL

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Если статья понравилась, то поделитесь ей в социальных сетях:

Читайте также

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам:

Заполните форму и наш менеджер перезвонит Вам в самое ближайшее время!

badge
Обратный звонок 1
Отправить
galka

Спасибо! Ваша заявка принята

close
galka

Спасибо! Ваша заявка принята

close