Что такое регулярные выражения?
Регулярные выражения помогают искать данные, соответствующие сложным критериям. Мы смотрели на шаблоны в предыдущем уроке. Если вы работали с подстановочными знаками раньше, вы можете спросить, зачем изучать регулярные выражения, если вы можете получить аналогичные результаты, используя подстановочные знаки. Потому что по сравнению с подстановочными знаками регулярные выражения позволяют нам искать данные, соответствующие еще более сложному критерию.
Основной синтаксис
Основной синтаксис для регулярного выражения следующий
SELECT statements... WHERE fieldname REGEXP 'pattern';
ВОТ —
- «Операторы SELECT …» — это стандартное утверждение SELECT
- «WHERE fieldname» — это имя столбца, для которого должно выполняться регулярное выражение.
- «REGEXP ‘pattern'» REGEXP — это оператор регулярного выражения, а ‘pattern’ представляет шаблон, который должен соответствовать 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 Workbench против 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 *’; даст все фильмы, содержащие символы «да». Например, код Да Винчи, Daddy’s Little Girls. | |
+ | Метасимвол плюс (+) используется для сопоставления одного или нескольких экземпляров строк, предшествующих ему. | SELECT * FROM `movies` WHERE` title` REGEXP ‘mon +’; выдаст все фильмы, содержащие символы «мон». Например, ангелы и демоны. | |
? | Метасимвол вопроса (?) Используется для соответствия нулю (0) или одному экземпляру строк, предшествующих ему. | ВЫБЕРИТЕ * ИЗ `категорий` ГДЕ` имя_категории` REGEXP ‘com?’; выдаст все категории, содержащие строку com. Например, комедия, романтическая комедия. | |
, | Точка (.) Метасимвол используется для любого одиночного символа в исключении новой строки. | ВЫБРАТЬ * ИЗ ФИЛЬМОВ ГДЕ `year_released` REGEXP ‘200.’; даст все фильмы, выпущенные за годы, начиная с символов «200», за которыми следует любой отдельный символ. Например, 2005, 2007, 2008 и т. д. | |
[ABC] | Charlist [а] используются для сопоставления любых из вложенных символов. | SELECT * FROM `movies` WHERE` title` REGEXP ‘[vwxyz]’; выдаст все фильмы, содержащие какой-либо один символ в «vwxyz». Например, Люди Икс, Код Да Винчи и т. д. | |
[^ А] | Список символов [^ abc] используется для соответствия любым символам, кроме прилагаемых. | 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]’; даст всем членам, которые имеют почтовые адреса, содержащие любой символ от а до я. . Например, Джанет Джонс с членством № 1. | |
[0-9] | [0-9] используется для сопоставления любой цифры от 0 до 9. | SELECT * FROM `members` WHERE` номер_контакта` REGEXP ‘[0-9]’ даст всем участникам отправленные контактные номера, содержащие символы «[0-9]». Например, Robert Phil. | |
^ | Символ каретки (^) используется для начала матча в начале. | SELECT * FROM `movies` WHERE` title` REGEXP ‘^ [cd]’; дает все фильмы с названием, начинающимся с любого из символов в «cd». Например, кодовое имя Black, Daddy’s Little Girls и Da Vinci Code. | |
| | Вертикальная черта (|) используется для изолирования альтернатив. | SELECT * FROM `movies` WHERE` title` REGEXP ‘^ [cd] | ^ [u]’; дает все фильмы с заголовком, начинающимся с любого из символов «cd» или «u». Например, кодовое имя «Черный», «Маленькая девочка папы», «Код да Винчи» и «Другой мир — Пробуждение». | |
[[: <:]] | [[: <:]] Соответствует началу слов. | SELECT * FROM `movies` WHERE` title` REGEXP ‘[[: <:]] для’; дает все фильмы с названиями, начиная с персонажей. Например: Забыть Сару Маршал. | |
[[:>:]] | [[:>:]] Соответствует концу слов. | SELECT * FROM `movies` WHERE` title` REGEXP ‘ack [[:>:]]’; дает все фильмы с названиями, заканчивающимися символами «ack». Например, кодовое имя Black. | |
[:учебный класс:] | [: Класс:] совпадает с классом символов , т.е. [: альфа:] , чтобы соответствовать письмам, [: пространство:] , чтобы соответствовать белому пространству, [пунктуатор] спичка пунктуацию и [: верхний:] для прописных букв класса. | SELECT * FROM `movies` WHERE` title` REGEXP ‘[: alpha:]’; все фильмы с заголовками содержат только буквы. Например, «Забыть Сару Маршал», «Люди Икс» и т. д. Такие фильмы, как «Пираты Карибского моря 4», будут опущены в этом запросе. |
Обратная косая черта (\) используется как escape-символ. Если мы хотим использовать его как часть шаблона в регулярном выражении, мы должны использовать двойную обратную косую черту (\\)
Резюме
- Регулярные выражения обеспечивают мощное и гибкое сопоставление с образцом, которое может помочь нам реализовать мощные утилиты поиска для наших систем баз данных.
- REGEXP — это оператор, используемый при выполнении сопоставления с шаблоном регулярного выражения. RLIKE — это синоним
- Регулярные выражения поддерживают несколько метасимволов, которые обеспечивают большую гибкость и контроль при сопоставлении с образцом.
- Обратная косая черта используется в качестве escape-символа в регулярных выражениях. Это учитывается только при сопоставлении с образцом, если используются двойные обратные слеши.
- Регулярные выражения не чувствительны к регистру.