Регулярные выражения MYSQL (REGEXP) с синтаксисом и примерами

Что такое регулярные выражения?

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

Основной синтаксис

Основной синтаксис регулярного выражения следующий:

SELECT statements... WHERE fieldname REGEXP 'pattern';

ЗДЕСЬ -

  • «Операторы SELECT…» это стандарт Оператор SELECT
  • «ГДЕ имя поля» — имя столбца, для которого должно быть выполнено регулярное выражение.
  • «Шаблон REGEXP» REGEXP — это оператор регулярного выражения, а «шаблон» представляет собой шаблон, которому будет соответствовать REGEXP. RLIKE это синоним REGEXP и достигает тех же результатов, что и REGEXP. Чтобы не путать его с оператором LIKE, лучше использовать REGEXP .

Давайте теперь посмотрим на практический пример:

SELECT * FROM `movies` WHERE `title` REGEXP 'code';

Приведенный выше запрос ищет все названия фильмов, в которых есть код слова. Не имеет значения, находится ли «код» в начале, середине или конце заголовка. Если оно содержится в заголовке, оно будет рассмотрено.

Предположим, мы хотим найти фильмы, которые начинаются с a, b, c или d, за которыми следует любое количество других символов. Как бы нам этого добиться? Мы можем использовать регулярное выражение вместе с метасимволами для достижения желаемых результатов.

SELECT * FROM `movies` WHERE `title` REGEXP '^[abcd]';

Выполнение приведенного выше сценария в MySQL верстак против myflixdb дает нам следующие результаты.

movie_id title director year_released category_id
4 Code Name Black Edgar Jimz 2010 NULL
5 Daddy's Little Girls NULL 2007 8
6 Angels and Demons NULL 2007 6
7 Davinci Code NULL 2007 6

Давайте теперь внимательно посмотрим на наше регулярное выражение, отвечающее за приведенный выше результат.

'^[abcd]', каретка (^) означает, что соответствие шаблону должно применяться в начале, а список символов [abcd] означает, что в нашем наборе результатов возвращаются только названия фильмов, начинающиеся с a, b, c или d.

Давайте изменим приведенный выше сценарий и используем список символов NOT и посмотрим, какие результаты мы получим после выполнения нашего запроса.

SELECT * FROM `movies` WHERE `title` REGEXP '^[^abcd]';

Выполнение приведенного выше сценария в MySQL Workbench с myflixdb дает нам следующие результаты.

movie_id title director year_released category_id
1 Pirates of the Caribean 4 Rob Marshall 2011 1
2 Forgetting Sarah Marshal Nicholas Stoller 2008 2
3 X-Men 2008
9 Honey mooners John Schultz 2005 8
16 67% Guilty 2012
17 The Great Dictator Chalie Chaplie 1920 7
18 sample movie Anonymous 8
19 movie 3 John Brown 1920 8

Давайте теперь внимательно посмотрим на наше регулярное выражение, отвечающее за приведенные выше результаты.

'^[^abcd]', каретка (^) означает, что соответствие шаблону должно применяться в начале, а список символов [^abcd] означает, что названия фильмов, начинающиеся с любого из включенных символов, исключаются из набора результатов.

Метасимволы регулярных выражений

В приведенном выше примере мы рассмотрели простейшую форму регулярного выражения. Давайте теперь посмотрим на более сложные сопоставления шаблонов регулярных выражений. Предположим, мы хотим искать названия фильмов, начинающиеся с шаблона «код», только используя регулярное выражение. Как нам это сделать? Ответ — метасимволы. Они позволяют нам точно настраивать результаты поиска по шаблону с помощью регулярных выражений.

Голец Описание Пример
* Территория звездочка (*) метасимвол используется для сопоставления нуля (0) или более экземпляров строк, предшествующих ему. ВЫБРАТЬ * ИЗ фильмов ГДЕ заголовок REGEXP 'da*'; выдаст все фильмы, содержащие символы «да». Например, «Код да Винчи», «Папины маленькие девочки».
+ Территория плюс (+) метасимвол используется для сопоставления одного или нескольких экземпляров предшествующих ему строк. SELECT * FROM `movies` WHERE `title` REGEXP 'mon+'; выдаст все фильмы, содержащие персонажей «мон». Например, «Ангелы и демоны».
? Вопрос(?) метасимвол используется для сопоставления нуля (0) или одного экземпляра строк, предшествующих ему. SELECT * FROM `categories` WHERE `category_name` REGEXP 'com?'; выдаст все категории, содержащие строку com. Например, комедия, романтическая комедия.
. Территория точка (.) метасимвол используется для соответствия любому отдельному символу, за исключением новой строки. ВЫБРАТЬ * ИЗ фильмов ГДЕ `year_released` REGEXP '200.'; выдаст все фильмы, выпущенные за годы, начинающиеся с символов «200», за которыми следует любой отдельный символ. Например, 2005,2007,2008 и т. д.
[абв] Территория список чарлистов [abc] используется для соответствия любому из включенных символов. SELECT * FROM `movies` WHERE `title` REGEXP '[vwxyz]'; выдаст все фильмы, содержащие какой-либо один персонаж в «vwxyz». Например, «Люди Икс», «Код да Винчи» и т. д.
[^ abc] Территория список символов [^abc] используется для сопоставления любых символов, кроме включенных. SELECT * FROM `movies` WHERE `title` REGEXP '^[^vwxyz]'; выдаст все фильмы, содержащие персонажей, отличных от «vwxyz».
[AZ] Территория [AZ] используется для соответствия любой заглавной букве. SELECT * FROM `members` WHERE `postal_address` REGEXP '[AZ]'; выдаст всем участникам, почтовый адрес которых содержит любые символы от А до Я. Например, Джанет Джонс с номером членства 1.
[аз] Территория [аз] используется для соответствия любой строчной букве SELECT * FROM `members` WHERE `postal_address` REGEXP '[az]'; выдаст всем участникам, чьи почтовые адреса содержат любые символы от a до z. .Например, Джанет Джонс с номером участника 1.
[0-9] Территория [0-9] используется для сопоставления любой цифры от 0 до 9. ВЫБЕРИТЕ * FROM `members` WHERE `contact_number` REGEXP '[0-9]' предоставит всем участникам, представившим контактные номера, содержащие символы «[0-9]». Например, Роберт Фил.
^ Территория каре (^) используется для начала матча с самого начала. SELECT * FROM `movies` WHERE `title` REGEXP '^[cd]'; дает все фильмы, название которых начинается с любого символа в «cd». Например, «Кодовое имя Черный», «Папины маленькие девочки» и «Код да Винчи».
| Территория вертикальная черта (|) используется для выделения альтернатив. SELECT * FROM `movies` WHERE `title` REGEXP '^[cd]|^[u]'; дает все фильмы, название которых начинается с любого символа «cd» или «u». Например, «Кодовое имя Черный», «Папина маленькая девочка», «Код да Винчи» и «Другой мир» — AwakenIng.
[[: <:]] Территория[[: <:]] соответствует началу слов. SELECT * FROM `movies` WHERE `title` REGEXP '[[:<:]]for';

дает все фильмы, названия которых начинаются с персонажей. Например: забыть Сару Маршал.

[[:>:]] Территория [[:>:]] соответствует концу слова. SELECT * FROM `movies` WHERE `title` REGEXP 'ack[[:>:]]';

дает все фильмы, названия которых заканчиваются на символы «ack»

.Например, кодовое имя Черный.

[:сорт:] Территория [:сорт:] соответствует классу символов, т.е.

[:альфа:] чтобы совпадать с буквами, [:космос:] чтобы соответствовать пустому пространству, [: punct:] соответствует знакам препинания и [:upper:] для букв высшего класса.

SELECT * FROM `movies` WHERE `title` REGEXP '[:alpha:]';

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

.Например, «Забыть Сару Маршал», «Людей Икс» и т. д.

В этом запросе не будет учитываться такой фильм, как «Пираты Карибского моря 4».

Обратная косая черта (\) используется в качестве escape-символа. Если мы хотим использовать его как часть шаблона в регулярном выражении, нам следует использовать двойную обратную косую черту (\\)

Резюме

  • Регулярные выражения обеспечивают мощное и гибкое сопоставление с образцом, которое может помочь нам реализовать утилиты мощного поиска для наших систем баз данных.
  • REGEXP — это оператор, используемый при сопоставлении шаблонов регулярных выражений. RLIKE – это синоним
  • Регулярные выражения поддерживают ряд метасимволов, которые обеспечивают большую гибкость и контроль при выполнении сопоставлений с шаблонами.
  • Обратная косая черта используется как escape-символ в регулярных выражениях. Он учитывается при сопоставлении с образцом только в том случае, если использовалась двойная обратная косая черта.
  • Регулярные выражения не чувствительны к регистру.