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

Anonim

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

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

Базовый синтаксис

Базовый синтаксис регулярного выражения выглядит следующим образом

SELECT statements… WHERE fieldname REGEXP 'pattern';

ЗДЕСЬ -

  • «Операторы SELECT…» - это стандартный оператор SELECT.
  • «WHERE fieldname» - это имя столбца, для которого должно выполняться регулярное выражение.
  • "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 для 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] означает, что заголовки фильмов, начинающиеся с любого из заключенных символов, исключены из набора результатов.

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

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

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

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

Резюме

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