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

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

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

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

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

ВОТ –

  • “SELECT statements …” – это стандартная инструкция SELECT
  • “WHERE fieldname” – это имя столбца, на котором должно выполняться регулярное выражение.
  • “REGEXP” pattern “ REGEXP является оператором регулярного выражения, а” pattern “представляет шаблон, который будет соответствовать REGEXP. RLIKE является синонимом REGEXP и достигает тех же результатов, что и REGEXP. Чтобы избежать путаницы с оператором LIKE, лучше использовать REGEXP .

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

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

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

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

movie_id заглавие директор year_released category_id
4 Название кода Black Эдгар Джимц 2010 НОЛЬ
5 Маленькие девочки папы НОЛЬ 2007 8
6 Ангелы и демоны НОЛЬ 2007 6
7 Давинский код НОЛЬ 2007 6

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

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

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

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

movie_id заглавие директор year_released category_id
1 Пираты Карибского моря 4 Роб Маршалл 2011 1
2 Забыть Сарра Маршала Николас Столлер 2008 2
3 X-Men 2008
9 Медовые луны Джон Шульц 2005 8
16 67% виновных 2012
17 Великий диктатор Chalie Chaplie 1920 7
18 образец фильма анонимное 8
19 фильм 3 Джон Браун 1920 8

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

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

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

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

 

голец Описание пример  
* Звездочка (*) Метасимвол используется для сопоставления ноль (0) или более экземпляров строк ,предшествующих его SELECT * FROM movies WHERE title REGEXP ‘da *’; даст все фильмы, содержащие символы “да”. Например, код Да Винчи, Маленькие девочки папы.
+ Метасимвол плюс (+)используется для сопоставления одного или нескольких экземпляров строк, предшествующих ему. SELECT * FROM movies WHERE title REGEXP ‘mon +’; даст все фильмы, содержащие символы “mon”. Например, “Ангелы и демоны”.
? Метасимвол вопроса (?)Используется для соответствия нулю (0) или одному экземпляру строк, предшествующих ему. SELECT * FROM categories WHERE category_name REGEXP ‘com?’;  дадут все категории, содержащие строку com. Например, комедия, романтическая комедия.
, Точка (.) Метасимвол используется , чтобы соответствовать любому одиночному символу в исключении новой строки. SELECT * FROM movies WHERE year_released REGEXP ‘200.’; даст все фильмы, выпущенные в годы, начинающиеся с символов “200”, за которыми следует какой-либо один символ. Например, 2005,2007,2008 и т. д.
[ABC] Charlist [а] используется для сопоставления любых из вложенных символов. SELECT * FROM movies WHERE title REGEXP ‘[vwxyz]’; даст все фильмы, содержащие любой персонаж в “vwxyz”. Например, X-Men, Da Vinci Code. Маленькие девочки папы и т. Д.
[^ А] Charlist [^ а] используются для сопоставления любых символов , исключая тех заключенные. SELECT * FROM movies WHERE title REGEXP ‘^ [^ vwxyz]’; предоставит все фильмы, содержащие символы, отличные от тех, что указаны в “vwxyz”.
[AZ] [AZ] используется , чтобы соответствовать любой заглавной букве. SELECT * FROM members WHERE postal_address REGEXP ‘[AZ]’; предоставит всем членам, у которых есть почтовый адрес, содержащий любой символ от A до Z. Например, Джанет Джонс с номером 1.
[AZ] [Аз] используется , чтобы соответствовать любому строчной буквы SELECT * 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]”. Например, Роберт Фил.
^ Каретка (^) используется ,чтобы начать матч в начале. SELECT * FROM movies WHERE title REGEXP ‘^ [cd]’; дает все фильмы с названием, начинающимся с любого из символов в “cd”. Например, “Название кода Black”, “Маленькие девочки папы” и “Код да Винчи”.
| Вертикальная черта (|)используется для изоляции альтернативы. SELECT * FROM movies WHERE title REGEXP ‘^ [cd] | ^ [u]’; дает все фильмы с названием, начинающимся с любого из символов в “cd” или “u”. Например, имя кода Black, маленькая девочка папы, код Da Vinci и Underworld – Awakening.
[[: <:]] [[: <:]] Соответствует началу слов. SELECT * FROM movies WHERE title REGEXP ‘[[: <:]] для’; дает все фильмы с названиями, начиная с символов. Например: Забыть Сарра Маршала.
[[:>:]] [[:>:]] Соответствует концу слов. SELECT * FROM movies WHERE title REGEXP ‘ack [[:>:]]’;  дает все фильмы с названиями, заканчивающимися символами “ack”. Например, Code Name Black.
[:класс:] [: Класс:] совпадает с классом символы , т.е. [: Alpha:] , чтобы соответствовать письма, [: пространство:] , чтобы соответствовать белому пространству, [пунктуатор]спичка пунктуацию и [: верхний:] для прописных букв класса. SELECT * FROM movies WHERE title REGEXP ‘[: alpha:]’; дает все фильмы с названиями, содержащими только буквы. Например, Забыть Сарра Маршала, X-Men и т. д. Фильм, похожий на “Пираты Карибского моря 4”, будет пропущен по этому запросу.

 

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

Резюме

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

Ответить

Хотите присоединиться к обсуждению?
Не стесняйтесь вносить свой вклад!

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

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